Следующий класс и экземпляр типа 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?