Types 删除类型标记是习惯用法吗?

Types 删除类型标记是习惯用法吗?,types,type-conversion,elm,Types,Type Conversion,Elm,我创建了以下类型(省略了一些不必要的细节) 我使用这些函数来创建它们 enemy : Int -> Int -> Piece enemy x y = Enemy { x = x, y = y } player : Int -> Int -> Piece player x y = Player { x = x, y = y } 但我发现自己必须先使用这个函数才能真正使用它们 toMover : Piece -> Mover toMover piece =

我创建了以下类型(省略了一些不必要的细节)

我使用这些函数来创建它们

enemy : Int -> Int -> Piece
enemy x y =
  Enemy { x = x, y = y }


player : Int -> Int -> Piece
player x y =
  Player { x = x, y = y }
但我发现自己必须先使用这个函数才能真正使用它们

toMover : Piece -> Mover
toMover piece =
  case piece of
    Enemy mover ->
      mover

    Player mover ->
      mover
。。。这似乎有点麻烦。这是我应该做的还是我让事情变得更难?我希望能够将一个
玩家
与一些
敌人
实例放在同一个列表中,有时能够区分它们之间的差异,但也能够编写两种类型(子类型?)的函数,而不必每次都调用
toMover

对其进行不同的建模:

type alias Mover =
  { x : Int
  , y : Int
  , kind : Kind
  }


type Kind = Enemy | Player 

enemy1 = Mover 0 0 Enemy -- these are shortcuts to item creation
player1 = Mover 2 2 Player 

enemy x y = Mover x y Enemy -- if you prefer functions 

player x y = Mover x y Player 
type alias Mover =
  { x : Int
  , y : Int
  , kind : Kind
  }


type Kind = Enemy | Player 

enemy1 = Mover 0 0 Enemy -- these are shortcuts to item creation
player1 = Mover 2 2 Player 

enemy x y = Mover x y Enemy -- if you prefer functions 

player x y = Mover x y Player