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