-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | FFunctor typeclass
--
-- Micro library with a Higher Kinded Functor in the spirit of HFunctor,
-- MFunctor and MonadTrans (which all have different kindedness).
--
-- Useful to map over the type parameter in a record of functions
--
--
@package ffunctor
@version 1.2.1
-- | Functor of Functors
module Data.FFunctor
-- | A Functor over Functors (aka Higher Kinded Functor)
class FFunctor (f :: (* -> *) -> *)
-- | Applies a natural transformation to a higher kinded type
ffmap :: (FFunctor f, Functor m, Functor n) => (forall a. m a -> n a) -> f m -> f n
-- | Applies a natural transformation to a higher kinded type
ffmap :: (FFunctor f, Generic1 f, FFunctor (Rep1 f), Functor m, Functor n) => (forall a. m a -> n a) -> f m -> f n
-- | Lifts an IO implementation of a higher kinded type (e.g. record of
-- functions) into a MonadIO
--
-- e.g. `luftIO logger` lifts a `Logger IO` into a `Logger m`
luftIO :: FFunctor f => MonadIO m => f IO -> f m
-- | Lifts a higher kinded type (e.g. record of functions) into a monad
-- transformer.
--
-- e.g. `luft logger` lifts a `Logger m` into a `Logger (ReaderT m Foo)`
luft :: FFunctor f => Monad m => MonadTrans t => Functor (t m) => f m -> f (t m)
instance Data.FFunctor.FFunctor GHC.Generics.V1
instance Data.FFunctor.FFunctor GHC.Generics.U1
instance Data.FFunctor.FFunctor f => Data.FFunctor.FFunctor (GHC.Generics.Rec1 f)
instance Data.FFunctor.FFunctor (GHC.Generics.K1 i c)
instance Data.FFunctor.FFunctor f => Data.FFunctor.FFunctor (GHC.Generics.M1 i c f)
instance (Data.FFunctor.FFunctor f, Data.FFunctor.FFunctor g) => Data.FFunctor.FFunctor (f GHC.Generics.:+: g)
instance (Data.FFunctor.FFunctor f, Data.FFunctor.FFunctor g) => Data.FFunctor.FFunctor (f GHC.Generics.:*: g)
instance (GHC.Base.Functor f, Data.FFunctor.FFunctor g) => Data.FFunctor.FFunctor (f GHC.Generics.:.: g)
instance (Data.FFunctor.FFunctor f, Data.FFunctor.FFunctor g) => Data.FFunctor.FFunctor (Data.Functor.Sum.Sum f g)
instance (Data.FFunctor.FFunctor f, Data.FFunctor.FFunctor g) => Data.FFunctor.FFunctor (Data.Functor.Product.Product f g)
instance Data.FFunctor.FFunctor (Data.Functor.Const.Const c)
instance (GHC.Base.Functor f, Data.FFunctor.FFunctor g) => Data.FFunctor.FFunctor (Data.Functor.Compose.Compose f g)