Eğer
class Print a where
print' :: a -> String
Sen a
bir tür olmak zorunda olduğundan emin olun, ancak
data A t = A t
derken sen A
bir tür yapıcı yapmak derken - A
değil bir tür, ancak A Int
, örneğin. A
, türlerde bir tür işlevdir, ancak Yazdırma sınıfındaki a
, tür işlevi değil, bir tür değeri olmalıdır.
Sen Functor
sınıf bir tür kurucusu sorar çünkü IO
için Tamam
instance Print (A Int) where
print' a = "abc"
yapabilirdi.
class Functor f where
fmap :: (a -> b) -> f a -> f b
Sen f a
türüdür beri f
sadece IO
ve A
olduğu gibi, bir tür yapıcı olduğunu görebiliriz. Sen
instance Functor A where -- OK, A is a constructor, Functor needs one
fmap f (A x) = A (f x)
yapmak mümkün olacak ve siz
instance Eq IO where -- not OK - IO is a constructor and Eq needs a type
(==) = error "this code won't compile"
yapmak mümkün olmayacaktır (Ben standart işlevi print
diðerbaðlantý önlemek için print'
yerine print
kullandım.)