Data.Functor.Deriving
Functor
deriveFunctor
makeFmap
deriveFunctor
limitations