Functors

class Functor f where
    fmap :: (a -> b) -> f a -> f b

f transforms types to types, and fmap brings functions along. If f represents a container like [], then fmap applies functions "inside" the container.

λ> fmap (1+) $ Just 5
Just 6

Rules for fmap (same as monoid transformation rules!):

fmap id       ←→  id
fmap (g . h)  ←→  (fmap g) . (fmap h)