以下是Haskell的类型类和实例:
在 Haskell 中,我现在可以定义一种类似于 catch-all 实例的东西,从而为所有 Maybe 类型创建一个实例:
class Able a where
able :: a -> Int
instance Able Int where
able x = x
通常将其翻译为Scala,如下所示:
trait Able[A] {
def able(a: A): Int
}
implicit object AbleInt extends Able[Int] {
def able(a: Int) = a
}
在 Haskell 中,我现在可以定义一种类似于 catch-all 实例的东西,从而为所有 Maybe 类型创建一个实例:
instance Able a => Able (Maybe a) where
able (Just a) = able a
able Nothing = 0
这定义了一个针对 Maybe Int
,Maybe Bool
等实例的 Able
,前提是已经存在 Int
,Bool
等类型的 Able
实例。
那么在 Scala 中该如何实现呢?