Three Laws of Functor Confusion

There's a conspiracy to prevent you from understanding functors, and the here are some of the tools used to keep you in the dark:

  1. In explanations about functional programming, authors blithely use f to mean either a function or an object for which there's a functor, e.g.
  f      :: (a -> b -> c)
  fmap   :: Functor f => (d -> e) -> f d -> f e
  fmap f :: Functor f =>             f a -> f (b -> c)    -- Identify d with a, and e with (b -> c)
  1. The word functor sometimes means a mapping between categories and other times means an object in a category for ...
more ...