使用密封大小写对象的枚举类型(从 haskell 到 scala)



我正在尝试将一些代码从Haskell翻译成scala语言。在 haskell 中,我实现了这样的枚举类型:

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

我想使用分离案例对象在 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 类型我收到错误的问题。我认为它应该写成一个词!任何帮助 !

在 Haskell 中,Num是一个需要单个类型参数(如 Int)来生成约束(如 Num Int 的类。所以在 scala 中,你应该期待这样的东西:

case class Num(value: Int) extends Rank

请注意,scala 要求你给参数起一个名字,不像 haskell

此外,您还缺少在scala代码中为Rank定义的ShowEq实例,但这似乎不是问题的一部分

最新更新