-- 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, e.g.
-- https://www.benjamin.pizza/posts/2017-12-15-functor-functors.html
-- and
-- https://discourse.haskell.org/t/local-capabilities-with-mtl/231
-- and
-- https://discourse.haskell.org/t/some-limits-of-mtl-with-records-of-functions/576
@package ffunctor
@version 1.2.0
-- | Functor of Functors
module Data.FFunctor
class FFunctor (f :: (* -> *) -> *)
ffmap :: (FFunctor f, Functor m, Functor n) => (forall a. m a -> n a) -> f m -> f n
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 impl of a record of functions into a more general MonadIO
-- impl
luftIO :: FFunctor f => MonadIO m => f IO -> f m
-- | Lifts a record of functions (that has an FFunctor) 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)