Listen und Bäume besitzen strukturerhaltendes Rekursionsschema:
map :: (a -> b) -> ([a] -> [b]) tmap :: (a -> b) -> (Tree a -> Tree b)Diese Gemeinsamkeit wird ausgedrückt durch:
class Functor f where
fmap :: (a -> b) -> (f a -> f b)
instance Functor [] where fmap = map
instance Functor Tree where fmap = tmap
Functor ist eine Klasse für Typkonstruktoren
(Datenkonstruktor: erzeugt Datum, Typkonstruktor: erzeugt Typ)