Il seguente Haskell tipo di classe e istanza:Scala vs Haskell typeclasses: "catchall" istanze
class Able a where
able :: a -> Int
instance Able Int where
able x = x
viene comunemente tradotto a Scala in questo modo:
trait Able[A] {
def able(a: A): Int
}
implicit object AbleInt extends Able[Int] {
def able(a: Int) = a
}
In Haskell ora posso definire una sorta di istanza catch-all e quindi creare un'istanza per tutti i tipi Maybe:
instance Able a => Able (Maybe a) where
able (Just a) = able a
able Nothing = 0
Questo definisce un istanc e di Able
per Maybe Int
, Maybe Bool
, ecc condizione che vi sia un caso Able
per Int
, Bool
, ecc
come si potrebbe farlo in Scala?
Geniale! Grazie mille :) – scravy