{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE Rank2Types     #-}

-- | Functor of Functors
module Data.FFunctor where

class FFunctor (f :: (* -> *) -> *) where
--ffmap :: (Functor m, Functor n) => (m ~> n) -> f m -> f n
  ffmap :: (Functor m, Functor n) => (forall a . (m a -> n a)) -> f m -> f n

-- TODO is there anything from stdlib that could have an instance?