-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Immediately lifts to a desired level
--
-- This package provides elevate function which composes
-- lift-like transformations automatically.
@package elevator
@version 0.1.1
-- | Automated effect elevator
module Control.Elevator
class Tower f where type family Floors f :: List (* -> *) Floors f = Empty toLoft = exhaust
toLoft :: Tower f => Union (Floors f) a -> f a
type Elevate f g = (Tower g, f ∈ Floors1 g)
type Floors1 g = g :> Floors g
toLoft1 :: Tower f => Union (Floors1 f) a -> f a
elevate :: Elevate f g => f a -> g a
instance Control.Elevator.Tower GHC.Types.IO
instance Control.Elevator.Tower Data.Functor.Identity.Identity
instance Control.Elevator.Tower GHC.Base.Maybe
instance Control.Elevator.Tower (Data.Either.Either e)
instance Control.Elevator.Tower ((->) r)
instance Control.Elevator.Tower []
instance Control.Elevator.Tower (GHC.ST.ST s)
instance Control.Elevator.Tower (Data.OpenUnion1.Clean.Union u)
instance (GHC.Base.Monad m, Control.Elevator.Tower m) => Control.Elevator.Tower (Control.Monad.Trans.State.Lazy.StateT s m)
instance (GHC.Base.Monad m, Control.Elevator.Tower m) => Control.Elevator.Tower (Control.Monad.Trans.State.Strict.StateT s m)
instance (GHC.Base.Monad m, Control.Elevator.Tower m) => Control.Elevator.Tower (Control.Monad.Trans.Reader.ReaderT r m)
instance (GHC.Base.Monoid w, GHC.Base.Monad m, Control.Elevator.Tower m) => Control.Elevator.Tower (Control.Monad.Trans.Writer.Lazy.WriterT w m)
instance (GHC.Base.Monoid w, GHC.Base.Monad m, Control.Elevator.Tower m) => Control.Elevator.Tower (Control.Monad.Trans.Writer.Strict.WriterT w m)
instance (GHC.Base.Monad m, Control.Elevator.Tower m) => Control.Elevator.Tower (Control.Monad.Trans.Cont.ContT r m)
instance (GHC.Base.Monad m, Control.Elevator.Tower m) => Control.Elevator.Tower (Control.Monad.Trans.Maybe.MaybeT m)
instance (GHC.Base.Monad m, Control.Elevator.Tower m) => Control.Elevator.Tower (Control.Monad.Trans.List.ListT m)
instance (GHC.Base.Monad m, Control.Elevator.Tower m) => Control.Elevator.Tower (Control.Monad.Trans.Except.ExceptT e m)