functor.hs