次の Haskell 型のクラスとインスタンス:
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 では、一種のキャッチオール インスタンスを定義して、すべての Maybe 型のインスタンスを作成できるようになりました。
instance Able a => Able (Maybe a) where
able (Just a) = able a
able Nothing = 0
、などのインスタンスがある場合、これは 、 などのインスタンスAble
を定義します。Maybe Int
Maybe Bool
Able
Int
Bool
Scalaでそれを行うにはどうすればよいでしょうか?