{-# LANGUAGE QuantifiedConstraints #-}
module Control.Monad.Trans.Heftia where
import Control.Effect.Class (Signature, type (~>))
import Control.Effect.Class.Machinery.HFunctor (HFunctor)
import Control.Heftia.Trans (TransHeftia, elaborateHT, hoistHeftia, liftLowerHT)
import Control.Monad.Cont (ContT)
import Control.Monad.Trans (MonadTrans, lift)
import Data.Coerce (Coercible, coerce)
import Data.Kind (Type)
class
(TransHeftia Monad h, forall sig. HFunctor sig => MonadTrans (h sig)) =>
MonadTransHeftia h
where
elaborateMK ::
(Monad m, HFunctor sig) =>
(sig (ContT r m) ~> ContT r m) ->
h sig m ~> ContT r m
elaborateMK = forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(m :: * -> *) (t :: (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *).
(MonadTransHeftia h, Monad m, MonadTrans t, Monad (t m),
HFunctor sig) =>
(sig (t m) ~> t m) -> h sig m ~> t m
elaborateMT
{-# INLINE elaborateMK #-}
reelaborateMK ::
(Monad m, HFunctor sig) =>
(sig (ContT r (h sig m)) ~> ContT r (h sig m)) ->
h sig m ~> ContT r (h sig m)
reelaborateMK = forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(m :: * -> *) (t :: (* -> *) -> * -> *) (n :: * -> *)
(sig :: (* -> *) -> * -> *).
(MonadTransHeftia h, Monad m, MonadTrans t, Coercible n (h sig m),
Monad (t n), Monad n, HFunctor sig) =>
(sig (t n) ~> t n) -> h sig m ~> t n
reelaborateMT
{-# INLINE reelaborateMK #-}
elaborateMT ::
(Monad m, MonadTrans t, Monad (t m), HFunctor sig) =>
(sig (t m) ~> t m) ->
h sig m ~> t m
elaborateMT = forall (c :: (* -> *) -> Constraint)
(h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *) (f :: * -> *)
(g :: * -> *) (sig :: (* -> *) -> * -> *).
(TransHeftia c h, c f, c g, HFunctor sig) =>
(f ~> g) -> (sig g ~> g) -> h sig f ~> g
elaborateHT forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift
{-# INLINE elaborateMT #-}
reelaborateMT ::
forall m t n sig.
(Monad m, MonadTrans t, Coercible n (h sig m), Monad (t n), Monad n, HFunctor sig) =>
(sig (t n) ~> t n) ->
h sig m ~> t n
reelaborateMT sig (t n) ~> t n
f = forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(m :: * -> *) (t :: (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *).
(MonadTransHeftia h, Monad m, MonadTrans t, Monad (t m),
HFunctor sig) =>
(sig (t m) ~> t m) -> h sig m ~> t m
elaborateMT sig (t n) ~> t n
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (c :: (* -> *) -> Constraint)
(h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *) (f :: * -> *)
(g :: * -> *) (sig :: (* -> *) -> * -> *).
(TransHeftia c h, c f, c g, HFunctor sig) =>
(f ~> g) -> h sig f ~> h sig g
hoistHeftia (coerce :: forall a b. Coercible a b => a -> b
coerce forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (c :: (* -> *) -> Constraint)
(h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (f :: * -> *).
(TransHeftia c h, c f, HFunctor sig) =>
f ~> h sig f
liftLowerHT @Monad @h @sig)
{-# INLINE reelaborateMT #-}
reinterpretHTTViaFinal ::
forall h m t n sig.
( MonadTransHeftia h
, Monad m
, MonadTrans t
, Coercible n (h sig m)
, Monad (t n)
, Monad n
, HFunctor sig
) =>
(sig (t n) ~> t n) ->
h sig m ~> t n
reinterpretHTTViaFinal :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(m :: * -> *) (t :: (* -> *) -> * -> *) (n :: * -> *)
(sig :: (* -> *) -> * -> *).
(MonadTransHeftia h, Monad m, MonadTrans t, Coercible n (h sig m),
Monad (t n), Monad n, HFunctor sig) =>
(sig (t n) ~> t n) -> h sig m ~> t n
reinterpretHTTViaFinal = forall (c :: (* -> *) -> Constraint)
(h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *) (f :: * -> *)
(g :: * -> *) (sig :: (* -> *) -> * -> *).
(TransHeftia c h, c f, c g, HFunctor sig) =>
(f ~> g) -> (sig g ~> g) -> h sig f ~> g
elaborateHT forall a b. (a -> b) -> a -> b
$ forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall b c a. (b -> c) -> (a -> b) -> a -> c
. coerce :: forall a b. Coercible a b => a -> b
coerce forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (c :: (* -> *) -> Constraint)
(h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (f :: * -> *).
(TransHeftia c h, c f, HFunctor sig) =>
f ~> h sig f
liftLowerHT @Monad @h @sig
{-# INLINE reinterpretHTTViaFinal #-}
newtype ViaLiftLowerH (h :: Signature -> (Type -> Type) -> Type -> Type) sig m a = ViaLiftLowerH
{forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a.
ViaLiftLowerH h sig m a -> h sig m a
runViaLiftLowerH :: h sig m a}
deriving newtype (forall a b. a -> ViaLiftLowerH h sig m b -> ViaLiftLowerH h sig m a
forall a b.
(a -> b) -> ViaLiftLowerH h sig m a -> ViaLiftLowerH h sig m b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a b.
Functor (h sig m) =>
a -> ViaLiftLowerH h sig m b -> ViaLiftLowerH h sig m a
forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a b.
Functor (h sig m) =>
(a -> b) -> ViaLiftLowerH h sig m a -> ViaLiftLowerH h sig m b
<$ :: forall a b. a -> ViaLiftLowerH h sig m b -> ViaLiftLowerH h sig m a
$c<$ :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a b.
Functor (h sig m) =>
a -> ViaLiftLowerH h sig m b -> ViaLiftLowerH h sig m a
fmap :: forall a b.
(a -> b) -> ViaLiftLowerH h sig m a -> ViaLiftLowerH h sig m b
$cfmap :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a b.
Functor (h sig m) =>
(a -> b) -> ViaLiftLowerH h sig m a -> ViaLiftLowerH h sig m b
Functor, forall a. a -> ViaLiftLowerH h sig m a
forall a b.
ViaLiftLowerH h sig m a
-> ViaLiftLowerH h sig m b -> ViaLiftLowerH h sig m a
forall a b.
ViaLiftLowerH h sig m a
-> ViaLiftLowerH h sig m b -> ViaLiftLowerH h sig m b
forall a b.
ViaLiftLowerH h sig m (a -> b)
-> ViaLiftLowerH h sig m a -> ViaLiftLowerH h sig m b
forall a b c.
(a -> b -> c)
-> ViaLiftLowerH h sig m a
-> ViaLiftLowerH h sig m b
-> ViaLiftLowerH h sig m c
forall (f :: * -> *).
Functor f
-> (forall a. a -> f a)
-> (forall a b. f (a -> b) -> f a -> f b)
-> (forall a b c. (a -> b -> c) -> f a -> f b -> f c)
-> (forall a b. f a -> f b -> f b)
-> (forall a b. f a -> f b -> f a)
-> Applicative f
forall {h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *}
{sig :: (* -> *) -> * -> *} {m :: * -> *}.
Applicative (h sig m) =>
Functor (ViaLiftLowerH h sig m)
forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a.
Applicative (h sig m) =>
a -> ViaLiftLowerH h sig m a
forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a b.
Applicative (h sig m) =>
ViaLiftLowerH h sig m a
-> ViaLiftLowerH h sig m b -> ViaLiftLowerH h sig m a
forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a b.
Applicative (h sig m) =>
ViaLiftLowerH h sig m a
-> ViaLiftLowerH h sig m b -> ViaLiftLowerH h sig m b
forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a b.
Applicative (h sig m) =>
ViaLiftLowerH h sig m (a -> b)
-> ViaLiftLowerH h sig m a -> ViaLiftLowerH h sig m b
forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a b c.
Applicative (h sig m) =>
(a -> b -> c)
-> ViaLiftLowerH h sig m a
-> ViaLiftLowerH h sig m b
-> ViaLiftLowerH h sig m c
<* :: forall a b.
ViaLiftLowerH h sig m a
-> ViaLiftLowerH h sig m b -> ViaLiftLowerH h sig m a
$c<* :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a b.
Applicative (h sig m) =>
ViaLiftLowerH h sig m a
-> ViaLiftLowerH h sig m b -> ViaLiftLowerH h sig m a
*> :: forall a b.
ViaLiftLowerH h sig m a
-> ViaLiftLowerH h sig m b -> ViaLiftLowerH h sig m b
$c*> :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a b.
Applicative (h sig m) =>
ViaLiftLowerH h sig m a
-> ViaLiftLowerH h sig m b -> ViaLiftLowerH h sig m b
liftA2 :: forall a b c.
(a -> b -> c)
-> ViaLiftLowerH h sig m a
-> ViaLiftLowerH h sig m b
-> ViaLiftLowerH h sig m c
$cliftA2 :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a b c.
Applicative (h sig m) =>
(a -> b -> c)
-> ViaLiftLowerH h sig m a
-> ViaLiftLowerH h sig m b
-> ViaLiftLowerH h sig m c
<*> :: forall a b.
ViaLiftLowerH h sig m (a -> b)
-> ViaLiftLowerH h sig m a -> ViaLiftLowerH h sig m b
$c<*> :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a b.
Applicative (h sig m) =>
ViaLiftLowerH h sig m (a -> b)
-> ViaLiftLowerH h sig m a -> ViaLiftLowerH h sig m b
pure :: forall a. a -> ViaLiftLowerH h sig m a
$cpure :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a.
Applicative (h sig m) =>
a -> ViaLiftLowerH h sig m a
Applicative, forall a. a -> ViaLiftLowerH h sig m a
forall a b.
ViaLiftLowerH h sig m a
-> ViaLiftLowerH h sig m b -> ViaLiftLowerH h sig m b
forall a b.
ViaLiftLowerH h sig m a
-> (a -> ViaLiftLowerH h sig m b) -> ViaLiftLowerH h sig m b
forall (m :: * -> *).
Applicative m
-> (forall a b. m a -> (a -> m b) -> m b)
-> (forall a b. m a -> m b -> m b)
-> (forall a. a -> m a)
-> Monad m
forall {h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *}
{sig :: (* -> *) -> * -> *} {m :: * -> *}.
Monad (h sig m) =>
Applicative (ViaLiftLowerH h sig m)
forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a.
Monad (h sig m) =>
a -> ViaLiftLowerH h sig m a
forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a b.
Monad (h sig m) =>
ViaLiftLowerH h sig m a
-> ViaLiftLowerH h sig m b -> ViaLiftLowerH h sig m b
forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a b.
Monad (h sig m) =>
ViaLiftLowerH h sig m a
-> (a -> ViaLiftLowerH h sig m b) -> ViaLiftLowerH h sig m b
return :: forall a. a -> ViaLiftLowerH h sig m a
$creturn :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a.
Monad (h sig m) =>
a -> ViaLiftLowerH h sig m a
>> :: forall a b.
ViaLiftLowerH h sig m a
-> ViaLiftLowerH h sig m b -> ViaLiftLowerH h sig m b
$c>> :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a b.
Monad (h sig m) =>
ViaLiftLowerH h sig m a
-> ViaLiftLowerH h sig m b -> ViaLiftLowerH h sig m b
>>= :: forall a b.
ViaLiftLowerH h sig m a
-> (a -> ViaLiftLowerH h sig m b) -> ViaLiftLowerH h sig m b
$c>>= :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a b.
Monad (h sig m) =>
ViaLiftLowerH h sig m a
-> (a -> ViaLiftLowerH h sig m b) -> ViaLiftLowerH h sig m b
Monad)
deriving stock (forall a. ViaLiftLowerH h sig m a -> Bool
forall m a. Monoid m => (a -> m) -> ViaLiftLowerH h sig m a -> m
forall a b. (a -> b -> b) -> b -> ViaLiftLowerH h sig m a -> b
forall (t :: * -> *).
(forall m. Monoid m => t m -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. t a -> [a])
-> (forall a. t a -> Bool)
-> (forall a. t a -> Int)
-> (forall a. Eq a => a -> t a -> Bool)
-> (forall a. Ord a => t a -> a)
-> (forall a. Ord a => t a -> a)
-> (forall a. Num a => t a -> a)
-> (forall a. Num a => t a -> a)
-> Foldable t
forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a.
(Foldable (h sig m), Eq a) =>
a -> ViaLiftLowerH h sig m a -> Bool
forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a.
(Foldable (h sig m), Num a) =>
ViaLiftLowerH h sig m a -> a
forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a.
(Foldable (h sig m), Ord a) =>
ViaLiftLowerH h sig m a -> a
forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) m.
(Foldable (h sig m), Monoid m) =>
ViaLiftLowerH h sig m m -> m
forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a.
Foldable (h sig m) =>
ViaLiftLowerH h sig m a -> Bool
forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a.
Foldable (h sig m) =>
ViaLiftLowerH h sig m a -> Int
forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a.
Foldable (h sig m) =>
ViaLiftLowerH h sig m a -> [a]
forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a.
Foldable (h sig m) =>
(a -> a -> a) -> ViaLiftLowerH h sig m a -> a
forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) m a.
(Foldable (h sig m), Monoid m) =>
(a -> m) -> ViaLiftLowerH h sig m a -> m
forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) b a.
Foldable (h sig m) =>
(b -> a -> b) -> b -> ViaLiftLowerH h sig m a -> b
forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a b.
Foldable (h sig m) =>
(a -> b -> b) -> b -> ViaLiftLowerH h sig m a -> b
product :: forall a. Num a => ViaLiftLowerH h sig m a -> a
$cproduct :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a.
(Foldable (h sig m), Num a) =>
ViaLiftLowerH h sig m a -> a
sum :: forall a. Num a => ViaLiftLowerH h sig m a -> a
$csum :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a.
(Foldable (h sig m), Num a) =>
ViaLiftLowerH h sig m a -> a
minimum :: forall a. Ord a => ViaLiftLowerH h sig m a -> a
$cminimum :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a.
(Foldable (h sig m), Ord a) =>
ViaLiftLowerH h sig m a -> a
maximum :: forall a. Ord a => ViaLiftLowerH h sig m a -> a
$cmaximum :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a.
(Foldable (h sig m), Ord a) =>
ViaLiftLowerH h sig m a -> a
elem :: forall a. Eq a => a -> ViaLiftLowerH h sig m a -> Bool
$celem :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a.
(Foldable (h sig m), Eq a) =>
a -> ViaLiftLowerH h sig m a -> Bool
length :: forall a. ViaLiftLowerH h sig m a -> Int
$clength :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a.
Foldable (h sig m) =>
ViaLiftLowerH h sig m a -> Int
null :: forall a. ViaLiftLowerH h sig m a -> Bool
$cnull :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a.
Foldable (h sig m) =>
ViaLiftLowerH h sig m a -> Bool
toList :: forall a. ViaLiftLowerH h sig m a -> [a]
$ctoList :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a.
Foldable (h sig m) =>
ViaLiftLowerH h sig m a -> [a]
foldl1 :: forall a. (a -> a -> a) -> ViaLiftLowerH h sig m a -> a
$cfoldl1 :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a.
Foldable (h sig m) =>
(a -> a -> a) -> ViaLiftLowerH h sig m a -> a
foldr1 :: forall a. (a -> a -> a) -> ViaLiftLowerH h sig m a -> a
$cfoldr1 :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a.
Foldable (h sig m) =>
(a -> a -> a) -> ViaLiftLowerH h sig m a -> a
foldl' :: forall b a. (b -> a -> b) -> b -> ViaLiftLowerH h sig m a -> b
$cfoldl' :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) b a.
Foldable (h sig m) =>
(b -> a -> b) -> b -> ViaLiftLowerH h sig m a -> b
foldl :: forall b a. (b -> a -> b) -> b -> ViaLiftLowerH h sig m a -> b
$cfoldl :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) b a.
Foldable (h sig m) =>
(b -> a -> b) -> b -> ViaLiftLowerH h sig m a -> b
foldr' :: forall a b. (a -> b -> b) -> b -> ViaLiftLowerH h sig m a -> b
$cfoldr' :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a b.
Foldable (h sig m) =>
(a -> b -> b) -> b -> ViaLiftLowerH h sig m a -> b
foldr :: forall a b. (a -> b -> b) -> b -> ViaLiftLowerH h sig m a -> b
$cfoldr :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a b.
Foldable (h sig m) =>
(a -> b -> b) -> b -> ViaLiftLowerH h sig m a -> b
foldMap' :: forall m a. Monoid m => (a -> m) -> ViaLiftLowerH h sig m a -> m
$cfoldMap' :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) m a.
(Foldable (h sig m), Monoid m) =>
(a -> m) -> ViaLiftLowerH h sig m a -> m
foldMap :: forall m a. Monoid m => (a -> m) -> ViaLiftLowerH h sig m a -> m
$cfoldMap :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) m a.
(Foldable (h sig m), Monoid m) =>
(a -> m) -> ViaLiftLowerH h sig m a -> m
fold :: forall m. Monoid m => ViaLiftLowerH h sig m m -> m
$cfold :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) m.
(Foldable (h sig m), Monoid m) =>
ViaLiftLowerH h sig m m -> m
Foldable, forall (t :: * -> *).
Functor t
-> Foldable t
-> (forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> t a -> f (t b))
-> (forall (f :: * -> *) a. Applicative f => t (f a) -> f (t a))
-> (forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> t a -> m (t b))
-> (forall (m :: * -> *) a. Monad m => t (m a) -> m (t a))
-> Traversable t
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b)
-> ViaLiftLowerH h sig m a -> f (ViaLiftLowerH h sig m b)
forall {h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *}
{sig :: (* -> *) -> * -> *} {m :: * -> *}.
Traversable (h sig m) =>
Functor (ViaLiftLowerH h sig m)
forall {h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *}
{sig :: (* -> *) -> * -> *} {m :: * -> *}.
Traversable (h sig m) =>
Foldable (ViaLiftLowerH h sig m)
forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) (m :: * -> *) a.
(Traversable (h sig m), Monad m) =>
ViaLiftLowerH h sig m (m a) -> m (ViaLiftLowerH h sig m a)
forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) (f :: * -> *) a.
(Traversable (h sig m), Applicative f) =>
ViaLiftLowerH h sig m (f a) -> f (ViaLiftLowerH h sig m a)
forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) (m :: * -> *) a b.
(Traversable (h sig m), Monad m) =>
(a -> m b)
-> ViaLiftLowerH h sig m a -> m (ViaLiftLowerH h sig m b)
forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) (f :: * -> *) a b.
(Traversable (h sig m), Applicative f) =>
(a -> f b)
-> ViaLiftLowerH h sig m a -> f (ViaLiftLowerH h sig m b)
sequence :: forall (m :: * -> *) a.
Monad m =>
ViaLiftLowerH h sig m (m a) -> m (ViaLiftLowerH h sig m a)
$csequence :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) (m :: * -> *) a.
(Traversable (h sig m), Monad m) =>
ViaLiftLowerH h sig m (m a) -> m (ViaLiftLowerH h sig m a)
mapM :: forall (m :: * -> *) a b.
Monad m =>
(a -> m b)
-> ViaLiftLowerH h sig m a -> m (ViaLiftLowerH h sig m b)
$cmapM :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) (m :: * -> *) a b.
(Traversable (h sig m), Monad m) =>
(a -> m b)
-> ViaLiftLowerH h sig m a -> m (ViaLiftLowerH h sig m b)
sequenceA :: forall (f :: * -> *) a.
Applicative f =>
ViaLiftLowerH h sig m (f a) -> f (ViaLiftLowerH h sig m a)
$csequenceA :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) (f :: * -> *) a.
(Traversable (h sig m), Applicative f) =>
ViaLiftLowerH h sig m (f a) -> f (ViaLiftLowerH h sig m a)
traverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b)
-> ViaLiftLowerH h sig m a -> f (ViaLiftLowerH h sig m b)
$ctraverse :: forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) (f :: * -> *) a b.
(Traversable (h sig m), Applicative f) =>
(a -> f b)
-> ViaLiftLowerH h sig m a -> f (ViaLiftLowerH h sig m b)
Traversable)
instance (TransHeftia Monad h, HFunctor sig) => MonadTrans (ViaLiftLowerH h sig) where
lift :: forall (m :: * -> *) a. Monad m => m a -> ViaLiftLowerH h sig m a
lift = forall (h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (m :: * -> *) a.
h sig m a -> ViaLiftLowerH h sig m a
ViaLiftLowerH forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (c :: (* -> *) -> Constraint)
(h :: ((* -> *) -> * -> *) -> (* -> *) -> * -> *)
(sig :: (* -> *) -> * -> *) (f :: * -> *).
(TransHeftia c h, c f, HFunctor sig) =>
f ~> h sig f
liftLowerHT
{-# INLINE lift #-}