Enum类型使用密封的箱子对象(从haskell到scala)

时间:2016-02-01 16:47:33

标签: scala haskell enums

我正在尝试将一些代码从haskell转换为scala语言。 在haskell中,我实现了类似的枚举类型:

data Rank = Jack | Queen | King | Ace | Num Int deriving (Show, Eq) 

我想使用selaled case Objects

在scala中实现它
sealed trait Rank
case object Jack extends Rank
case object Queen extends Rank
case object King extends Rank
case object Ace extends Rank
case object Num Int extends Rank

对于Num Int类型我遇到错误的问题。我认为它应该写成一个字!任何帮助!

1 个答案:

答案 0 :(得分:5)

在Haskell中Num是一个类,它需要单个类型参数,例如Int,以产生Num Int之类的约束。所以在scala中你应该期待类似的东西:

case class Num(value: Int) extends Rank

请注意,与haskell

不同,scala要求您为参数指定名称

此外,您错过了在scala代码中为Show定义的EqRank的实例,但这似乎不是问题的一部分