{-# LANGUAGE DerivingVia, MagicHash #-}
module Control.Effect.BaseControl
(
BaseControl
, withLowerToBase
, gainBaseControl
, runBaseControl
, baseControlToFinal
, MonadBaseControl(..)
, control
, threadBaseControlViaClass
, powerAlgBaseControl
, powerAlgBaseControlFinal
, GainBaseControlC(..)
, BaseControlC
, BaseControlToFinalC
) where
import Data.Coerce
import Control.Monad
import Control.Effect
import Control.Effect.Carrier
import Control.Effect.Type.Internal.BaseControl
import Control.Effect.Internal.BaseControl
import Control.Effect.Internal.Itself
import Control.Effect.Internal.Utils
import Control.Monad.Trans.Control
import GHC.Exts (Proxy#, proxy#)
newtype GainBaseControlC b z m a = GainBaseControlC {
GainBaseControlC b z m a -> m a
unGainBaseControlC :: m a
}
deriving ( a -> GainBaseControlC b z m b -> GainBaseControlC b z m a
(a -> b) -> GainBaseControlC b z m a -> GainBaseControlC b z m b
(forall a b.
(a -> b) -> GainBaseControlC b z m a -> GainBaseControlC b z m b)
-> (forall a b.
a -> GainBaseControlC b z m b -> GainBaseControlC b z m a)
-> Functor (GainBaseControlC b z m)
forall k (b :: k) k (z :: k) (m :: * -> *) a b.
Functor m =>
a -> GainBaseControlC b z m b -> GainBaseControlC b z m a
forall k (b :: k) k (z :: k) (m :: * -> *) a b.
Functor m =>
(a -> b) -> GainBaseControlC b z m a -> GainBaseControlC b z m b
forall a b.
a -> GainBaseControlC b z m b -> GainBaseControlC b z m a
forall a b.
(a -> b) -> GainBaseControlC b z m a -> GainBaseControlC b z m b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: a -> GainBaseControlC b z m b -> GainBaseControlC b z m a
$c<$ :: forall k (b :: k) k (z :: k) (m :: * -> *) a b.
Functor m =>
a -> GainBaseControlC b z m b -> GainBaseControlC b z m a
fmap :: (a -> b) -> GainBaseControlC b z m a -> GainBaseControlC b z m b
$cfmap :: forall k (b :: k) k (z :: k) (m :: * -> *) a b.
Functor m =>
(a -> b) -> GainBaseControlC b z m a -> GainBaseControlC b z m b
Functor, Functor (GainBaseControlC b z m)
a -> GainBaseControlC b z m a
Functor (GainBaseControlC b z m)
-> (forall a. a -> GainBaseControlC b z m a)
-> (forall a b.
GainBaseControlC b z m (a -> b)
-> GainBaseControlC b z m a -> GainBaseControlC b z m b)
-> (forall a b c.
(a -> b -> c)
-> GainBaseControlC b z m a
-> GainBaseControlC b z m b
-> GainBaseControlC b z m c)
-> (forall a b.
GainBaseControlC b z m a
-> GainBaseControlC b z m b -> GainBaseControlC b z m b)
-> (forall a b.
GainBaseControlC b z m a
-> GainBaseControlC b z m b -> GainBaseControlC b z m a)
-> Applicative (GainBaseControlC b z m)
GainBaseControlC b z m a
-> GainBaseControlC b z m b -> GainBaseControlC b z m b
GainBaseControlC b z m a
-> GainBaseControlC b z m b -> GainBaseControlC b z m a
GainBaseControlC b z m (a -> b)
-> GainBaseControlC b z m a -> GainBaseControlC b z m b
(a -> b -> c)
-> GainBaseControlC b z m a
-> GainBaseControlC b z m b
-> GainBaseControlC b z m c
forall a. a -> GainBaseControlC b z m a
forall k (b :: k) k (z :: k) (m :: * -> *).
Applicative m =>
Functor (GainBaseControlC b z m)
forall k (b :: k) k (z :: k) (m :: * -> *) a.
Applicative m =>
a -> GainBaseControlC b z m a
forall k (b :: k) k (z :: k) (m :: * -> *) a b.
Applicative m =>
GainBaseControlC b z m a
-> GainBaseControlC b z m b -> GainBaseControlC b z m a
forall k (b :: k) k (z :: k) (m :: * -> *) a b.
Applicative m =>
GainBaseControlC b z m a
-> GainBaseControlC b z m b -> GainBaseControlC b z m b
forall k (b :: k) k (z :: k) (m :: * -> *) a b.
Applicative m =>
GainBaseControlC b z m (a -> b)
-> GainBaseControlC b z m a -> GainBaseControlC b z m b
forall k (b :: k) k (z :: k) (m :: * -> *) a b c.
Applicative m =>
(a -> b -> c)
-> GainBaseControlC b z m a
-> GainBaseControlC b z m b
-> GainBaseControlC b z m c
forall a b.
GainBaseControlC b z m a
-> GainBaseControlC b z m b -> GainBaseControlC b z m a
forall a b.
GainBaseControlC b z m a
-> GainBaseControlC b z m b -> GainBaseControlC b z m b
forall a b.
GainBaseControlC b z m (a -> b)
-> GainBaseControlC b z m a -> GainBaseControlC b z m b
forall a b c.
(a -> b -> c)
-> GainBaseControlC b z m a
-> GainBaseControlC b z m b
-> GainBaseControlC b z 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
<* :: GainBaseControlC b z m a
-> GainBaseControlC b z m b -> GainBaseControlC b z m a
$c<* :: forall k (b :: k) k (z :: k) (m :: * -> *) a b.
Applicative m =>
GainBaseControlC b z m a
-> GainBaseControlC b z m b -> GainBaseControlC b z m a
*> :: GainBaseControlC b z m a
-> GainBaseControlC b z m b -> GainBaseControlC b z m b
$c*> :: forall k (b :: k) k (z :: k) (m :: * -> *) a b.
Applicative m =>
GainBaseControlC b z m a
-> GainBaseControlC b z m b -> GainBaseControlC b z m b
liftA2 :: (a -> b -> c)
-> GainBaseControlC b z m a
-> GainBaseControlC b z m b
-> GainBaseControlC b z m c
$cliftA2 :: forall k (b :: k) k (z :: k) (m :: * -> *) a b c.
Applicative m =>
(a -> b -> c)
-> GainBaseControlC b z m a
-> GainBaseControlC b z m b
-> GainBaseControlC b z m c
<*> :: GainBaseControlC b z m (a -> b)
-> GainBaseControlC b z m a -> GainBaseControlC b z m b
$c<*> :: forall k (b :: k) k (z :: k) (m :: * -> *) a b.
Applicative m =>
GainBaseControlC b z m (a -> b)
-> GainBaseControlC b z m a -> GainBaseControlC b z m b
pure :: a -> GainBaseControlC b z m a
$cpure :: forall k (b :: k) k (z :: k) (m :: * -> *) a.
Applicative m =>
a -> GainBaseControlC b z m a
$cp1Applicative :: forall k (b :: k) k (z :: k) (m :: * -> *).
Applicative m =>
Functor (GainBaseControlC b z m)
Applicative, Applicative (GainBaseControlC b z m)
a -> GainBaseControlC b z m a
Applicative (GainBaseControlC b z m)
-> (forall a b.
GainBaseControlC b z m a
-> (a -> GainBaseControlC b z m b) -> GainBaseControlC b z m b)
-> (forall a b.
GainBaseControlC b z m a
-> GainBaseControlC b z m b -> GainBaseControlC b z m b)
-> (forall a. a -> GainBaseControlC b z m a)
-> Monad (GainBaseControlC b z m)
GainBaseControlC b z m a
-> (a -> GainBaseControlC b z m b) -> GainBaseControlC b z m b
GainBaseControlC b z m a
-> GainBaseControlC b z m b -> GainBaseControlC b z m b
forall a. a -> GainBaseControlC b z m a
forall k (b :: k) k (z :: k) (m :: * -> *).
Monad m =>
Applicative (GainBaseControlC b z m)
forall k (b :: k) k (z :: k) (m :: * -> *) a.
Monad m =>
a -> GainBaseControlC b z m a
forall k (b :: k) k (z :: k) (m :: * -> *) a b.
Monad m =>
GainBaseControlC b z m a
-> GainBaseControlC b z m b -> GainBaseControlC b z m b
forall k (b :: k) k (z :: k) (m :: * -> *) a b.
Monad m =>
GainBaseControlC b z m a
-> (a -> GainBaseControlC b z m b) -> GainBaseControlC b z m b
forall a b.
GainBaseControlC b z m a
-> GainBaseControlC b z m b -> GainBaseControlC b z m b
forall a b.
GainBaseControlC b z m a
-> (a -> GainBaseControlC b z m b) -> GainBaseControlC b z 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
return :: a -> GainBaseControlC b z m a
$creturn :: forall k (b :: k) k (z :: k) (m :: * -> *) a.
Monad m =>
a -> GainBaseControlC b z m a
>> :: GainBaseControlC b z m a
-> GainBaseControlC b z m b -> GainBaseControlC b z m b
$c>> :: forall k (b :: k) k (z :: k) (m :: * -> *) a b.
Monad m =>
GainBaseControlC b z m a
-> GainBaseControlC b z m b -> GainBaseControlC b z m b
>>= :: GainBaseControlC b z m a
-> (a -> GainBaseControlC b z m b) -> GainBaseControlC b z m b
$c>>= :: forall k (b :: k) k (z :: k) (m :: * -> *) a b.
Monad m =>
GainBaseControlC b z m a
-> (a -> GainBaseControlC b z m b) -> GainBaseControlC b z m b
$cp1Monad :: forall k (b :: k) k (z :: k) (m :: * -> *).
Monad m =>
Applicative (GainBaseControlC b z m)
Monad
, Applicative (GainBaseControlC b z m)
GainBaseControlC b z m a
Applicative (GainBaseControlC b z m)
-> (forall a. GainBaseControlC b z m a)
-> (forall a.
GainBaseControlC b z m a
-> GainBaseControlC b z m a -> GainBaseControlC b z m a)
-> (forall a.
GainBaseControlC b z m a -> GainBaseControlC b z m [a])
-> (forall a.
GainBaseControlC b z m a -> GainBaseControlC b z m [a])
-> Alternative (GainBaseControlC b z m)
GainBaseControlC b z m a
-> GainBaseControlC b z m a -> GainBaseControlC b z m a
GainBaseControlC b z m a -> GainBaseControlC b z m [a]
GainBaseControlC b z m a -> GainBaseControlC b z m [a]
forall a. GainBaseControlC b z m a
forall a. GainBaseControlC b z m a -> GainBaseControlC b z m [a]
forall a.
GainBaseControlC b z m a
-> GainBaseControlC b z m a -> GainBaseControlC b z m a
forall k (b :: k) k (z :: k) (m :: * -> *).
Alternative m =>
Applicative (GainBaseControlC b z m)
forall k (b :: k) k (z :: k) (m :: * -> *) a.
Alternative m =>
GainBaseControlC b z m a
forall k (b :: k) k (z :: k) (m :: * -> *) a.
Alternative m =>
GainBaseControlC b z m a -> GainBaseControlC b z m [a]
forall k (b :: k) k (z :: k) (m :: * -> *) a.
Alternative m =>
GainBaseControlC b z m a
-> GainBaseControlC b z m a -> GainBaseControlC b z m a
forall (f :: * -> *).
Applicative f
-> (forall a. f a)
-> (forall a. f a -> f a -> f a)
-> (forall a. f a -> f [a])
-> (forall a. f a -> f [a])
-> Alternative f
many :: GainBaseControlC b z m a -> GainBaseControlC b z m [a]
$cmany :: forall k (b :: k) k (z :: k) (m :: * -> *) a.
Alternative m =>
GainBaseControlC b z m a -> GainBaseControlC b z m [a]
some :: GainBaseControlC b z m a -> GainBaseControlC b z m [a]
$csome :: forall k (b :: k) k (z :: k) (m :: * -> *) a.
Alternative m =>
GainBaseControlC b z m a -> GainBaseControlC b z m [a]
<|> :: GainBaseControlC b z m a
-> GainBaseControlC b z m a -> GainBaseControlC b z m a
$c<|> :: forall k (b :: k) k (z :: k) (m :: * -> *) a.
Alternative m =>
GainBaseControlC b z m a
-> GainBaseControlC b z m a -> GainBaseControlC b z m a
empty :: GainBaseControlC b z m a
$cempty :: forall k (b :: k) k (z :: k) (m :: * -> *) a.
Alternative m =>
GainBaseControlC b z m a
$cp1Alternative :: forall k (b :: k) k (z :: k) (m :: * -> *).
Alternative m =>
Applicative (GainBaseControlC b z m)
Alternative, Monad (GainBaseControlC b z m)
Alternative (GainBaseControlC b z m)
GainBaseControlC b z m a
Alternative (GainBaseControlC b z m)
-> Monad (GainBaseControlC b z m)
-> (forall a. GainBaseControlC b z m a)
-> (forall a.
GainBaseControlC b z m a
-> GainBaseControlC b z m a -> GainBaseControlC b z m a)
-> MonadPlus (GainBaseControlC b z m)
GainBaseControlC b z m a
-> GainBaseControlC b z m a -> GainBaseControlC b z m a
forall a. GainBaseControlC b z m a
forall a.
GainBaseControlC b z m a
-> GainBaseControlC b z m a -> GainBaseControlC b z m a
forall k (b :: k) k (z :: k) (m :: * -> *).
MonadPlus m =>
Monad (GainBaseControlC b z m)
forall k (b :: k) k (z :: k) (m :: * -> *).
MonadPlus m =>
Alternative (GainBaseControlC b z m)
forall k (b :: k) k (z :: k) (m :: * -> *) a.
MonadPlus m =>
GainBaseControlC b z m a
forall k (b :: k) k (z :: k) (m :: * -> *) a.
MonadPlus m =>
GainBaseControlC b z m a
-> GainBaseControlC b z m a -> GainBaseControlC b z m a
forall (m :: * -> *).
Alternative m
-> Monad m
-> (forall a. m a)
-> (forall a. m a -> m a -> m a)
-> MonadPlus m
mplus :: GainBaseControlC b z m a
-> GainBaseControlC b z m a -> GainBaseControlC b z m a
$cmplus :: forall k (b :: k) k (z :: k) (m :: * -> *) a.
MonadPlus m =>
GainBaseControlC b z m a
-> GainBaseControlC b z m a -> GainBaseControlC b z m a
mzero :: GainBaseControlC b z m a
$cmzero :: forall k (b :: k) k (z :: k) (m :: * -> *) a.
MonadPlus m =>
GainBaseControlC b z m a
$cp2MonadPlus :: forall k (b :: k) k (z :: k) (m :: * -> *).
MonadPlus m =>
Monad (GainBaseControlC b z m)
$cp1MonadPlus :: forall k (b :: k) k (z :: k) (m :: * -> *).
MonadPlus m =>
Alternative (GainBaseControlC b z m)
MonadPlus
, Monad (GainBaseControlC b z m)
Monad (GainBaseControlC b z m)
-> (forall a.
(a -> GainBaseControlC b z m a) -> GainBaseControlC b z m a)
-> MonadFix (GainBaseControlC b z m)
(a -> GainBaseControlC b z m a) -> GainBaseControlC b z m a
forall a.
(a -> GainBaseControlC b z m a) -> GainBaseControlC b z m a
forall k (b :: k) k (z :: k) (m :: * -> *).
MonadFix m =>
Monad (GainBaseControlC b z m)
forall k (b :: k) k (z :: k) (m :: * -> *) a.
MonadFix m =>
(a -> GainBaseControlC b z m a) -> GainBaseControlC b z m a
forall (m :: * -> *).
Monad m -> (forall a. (a -> m a) -> m a) -> MonadFix m
mfix :: (a -> GainBaseControlC b z m a) -> GainBaseControlC b z m a
$cmfix :: forall k (b :: k) k (z :: k) (m :: * -> *) a.
MonadFix m =>
(a -> GainBaseControlC b z m a) -> GainBaseControlC b z m a
$cp1MonadFix :: forall k (b :: k) k (z :: k) (m :: * -> *).
MonadFix m =>
Monad (GainBaseControlC b z m)
MonadFix, Monad (GainBaseControlC b z m)
Monad (GainBaseControlC b z m)
-> (forall a. String -> GainBaseControlC b z m a)
-> MonadFail (GainBaseControlC b z m)
String -> GainBaseControlC b z m a
forall a. String -> GainBaseControlC b z m a
forall k (b :: k) k (z :: k) (m :: * -> *).
MonadFail m =>
Monad (GainBaseControlC b z m)
forall k (b :: k) k (z :: k) (m :: * -> *) a.
MonadFail m =>
String -> GainBaseControlC b z m a
forall (m :: * -> *).
Monad m -> (forall a. String -> m a) -> MonadFail m
fail :: String -> GainBaseControlC b z m a
$cfail :: forall k (b :: k) k (z :: k) (m :: * -> *) a.
MonadFail m =>
String -> GainBaseControlC b z m a
$cp1MonadFail :: forall k (b :: k) k (z :: k) (m :: * -> *).
MonadFail m =>
Monad (GainBaseControlC b z m)
MonadFail, Monad (GainBaseControlC b z m)
Monad (GainBaseControlC b z m)
-> (forall a. IO a -> GainBaseControlC b z m a)
-> MonadIO (GainBaseControlC b z m)
IO a -> GainBaseControlC b z m a
forall a. IO a -> GainBaseControlC b z m a
forall k (b :: k) k (z :: k) (m :: * -> *).
MonadIO m =>
Monad (GainBaseControlC b z m)
forall k (b :: k) k (z :: k) (m :: * -> *) a.
MonadIO m =>
IO a -> GainBaseControlC b z m a
forall (m :: * -> *).
Monad m -> (forall a. IO a -> m a) -> MonadIO m
liftIO :: IO a -> GainBaseControlC b z m a
$cliftIO :: forall k (b :: k) k (z :: k) (m :: * -> *) a.
MonadIO m =>
IO a -> GainBaseControlC b z m a
$cp1MonadIO :: forall k (b :: k) k (z :: k) (m :: * -> *).
MonadIO m =>
Monad (GainBaseControlC b z m)
MonadIO
, Monad (GainBaseControlC b z m)
e -> GainBaseControlC b z m a
Monad (GainBaseControlC b z m)
-> (forall e a. Exception e => e -> GainBaseControlC b z m a)
-> MonadThrow (GainBaseControlC b z m)
forall k (b :: k) k (z :: k) (m :: * -> *).
MonadThrow m =>
Monad (GainBaseControlC b z m)
forall k (b :: k) k (z :: k) (m :: * -> *) e a.
(MonadThrow m, Exception e) =>
e -> GainBaseControlC b z m a
forall e a. Exception e => e -> GainBaseControlC b z m a
forall (m :: * -> *).
Monad m -> (forall e a. Exception e => e -> m a) -> MonadThrow m
throwM :: e -> GainBaseControlC b z m a
$cthrowM :: forall k (b :: k) k (z :: k) (m :: * -> *) e a.
(MonadThrow m, Exception e) =>
e -> GainBaseControlC b z m a
$cp1MonadThrow :: forall k (b :: k) k (z :: k) (m :: * -> *).
MonadThrow m =>
Monad (GainBaseControlC b z m)
MonadThrow, MonadThrow (GainBaseControlC b z m)
MonadThrow (GainBaseControlC b z m)
-> (forall e a.
Exception e =>
GainBaseControlC b z m a
-> (e -> GainBaseControlC b z m a) -> GainBaseControlC b z m a)
-> MonadCatch (GainBaseControlC b z m)
GainBaseControlC b z m a
-> (e -> GainBaseControlC b z m a) -> GainBaseControlC b z m a
forall k (b :: k) k (z :: k) (m :: * -> *).
MonadCatch m =>
MonadThrow (GainBaseControlC b z m)
forall k (b :: k) k (z :: k) (m :: * -> *) e a.
(MonadCatch m, Exception e) =>
GainBaseControlC b z m a
-> (e -> GainBaseControlC b z m a) -> GainBaseControlC b z m a
forall e a.
Exception e =>
GainBaseControlC b z m a
-> (e -> GainBaseControlC b z m a) -> GainBaseControlC b z m a
forall (m :: * -> *).
MonadThrow m
-> (forall e a. Exception e => m a -> (e -> m a) -> m a)
-> MonadCatch m
catch :: GainBaseControlC b z m a
-> (e -> GainBaseControlC b z m a) -> GainBaseControlC b z m a
$ccatch :: forall k (b :: k) k (z :: k) (m :: * -> *) e a.
(MonadCatch m, Exception e) =>
GainBaseControlC b z m a
-> (e -> GainBaseControlC b z m a) -> GainBaseControlC b z m a
$cp1MonadCatch :: forall k (b :: k) k (z :: k) (m :: * -> *).
MonadCatch m =>
MonadThrow (GainBaseControlC b z m)
MonadCatch, MonadCatch (GainBaseControlC b z m)
MonadCatch (GainBaseControlC b z m)
-> (forall b.
((forall a. GainBaseControlC b z m a -> GainBaseControlC b z m a)
-> GainBaseControlC b z m b)
-> GainBaseControlC b z m b)
-> (forall b.
((forall a. GainBaseControlC b z m a -> GainBaseControlC b z m a)
-> GainBaseControlC b z m b)
-> GainBaseControlC b z m b)
-> (forall a b c.
GainBaseControlC b z m a
-> (a -> ExitCase b -> GainBaseControlC b z m c)
-> (a -> GainBaseControlC b z m b)
-> GainBaseControlC b z m (b, c))
-> MonadMask (GainBaseControlC b z m)
GainBaseControlC b z m a
-> (a -> ExitCase b -> GainBaseControlC b z m c)
-> (a -> GainBaseControlC b z m b)
-> GainBaseControlC b z m (b, c)
((forall a. GainBaseControlC b z m a -> GainBaseControlC b z m a)
-> GainBaseControlC b z m b)
-> GainBaseControlC b z m b
((forall a. GainBaseControlC b z m a -> GainBaseControlC b z m a)
-> GainBaseControlC b z m b)
-> GainBaseControlC b z m b
forall b.
((forall a. GainBaseControlC b z m a -> GainBaseControlC b z m a)
-> GainBaseControlC b z m b)
-> GainBaseControlC b z m b
forall k (b :: k) k (z :: k) (m :: * -> *).
MonadMask m =>
MonadCatch (GainBaseControlC b z m)
forall k (b :: k) k (z :: k) (m :: * -> *) b.
MonadMask m =>
((forall a. GainBaseControlC b z m a -> GainBaseControlC b z m a)
-> GainBaseControlC b z m b)
-> GainBaseControlC b z m b
forall k (b :: k) k (z :: k) (m :: * -> *) a b c.
MonadMask m =>
GainBaseControlC b z m a
-> (a -> ExitCase b -> GainBaseControlC b z m c)
-> (a -> GainBaseControlC b z m b)
-> GainBaseControlC b z m (b, c)
forall a b c.
GainBaseControlC b z m a
-> (a -> ExitCase b -> GainBaseControlC b z m c)
-> (a -> GainBaseControlC b z m b)
-> GainBaseControlC b z m (b, c)
forall (m :: * -> *).
MonadCatch m
-> (forall b. ((forall a. m a -> m a) -> m b) -> m b)
-> (forall b. ((forall a. m a -> m a) -> m b) -> m b)
-> (forall a b c.
m a -> (a -> ExitCase b -> m c) -> (a -> m b) -> m (b, c))
-> MonadMask m
generalBracket :: GainBaseControlC b z m a
-> (a -> ExitCase b -> GainBaseControlC b z m c)
-> (a -> GainBaseControlC b z m b)
-> GainBaseControlC b z m (b, c)
$cgeneralBracket :: forall k (b :: k) k (z :: k) (m :: * -> *) a b c.
MonadMask m =>
GainBaseControlC b z m a
-> (a -> ExitCase b -> GainBaseControlC b z m c)
-> (a -> GainBaseControlC b z m b)
-> GainBaseControlC b z m (b, c)
uninterruptibleMask :: ((forall a. GainBaseControlC b z m a -> GainBaseControlC b z m a)
-> GainBaseControlC b z m b)
-> GainBaseControlC b z m b
$cuninterruptibleMask :: forall k (b :: k) k (z :: k) (m :: * -> *) b.
MonadMask m =>
((forall a. GainBaseControlC b z m a -> GainBaseControlC b z m a)
-> GainBaseControlC b z m b)
-> GainBaseControlC b z m b
mask :: ((forall a. GainBaseControlC b z m a -> GainBaseControlC b z m a)
-> GainBaseControlC b z m b)
-> GainBaseControlC b z m b
$cmask :: forall k (b :: k) k (z :: k) (m :: * -> *) b.
MonadMask m =>
((forall a. GainBaseControlC b z m a -> GainBaseControlC b z m a)
-> GainBaseControlC b z m b)
-> GainBaseControlC b z m b
$cp1MonadMask :: forall k (b :: k) k (z :: k) (m :: * -> *).
MonadMask m =>
MonadCatch (GainBaseControlC b z m)
MonadMask
, Monad (GainBaseControlC b z m)
Monad (GainBaseControlC b z m)
-> (forall a.
Algebra'
(Prims (GainBaseControlC b z m)) (GainBaseControlC b z m) a)
-> (forall (z :: * -> *) a.
Monad z =>
Reformulation'
(Derivs (GainBaseControlC b z m))
(Prims (GainBaseControlC b z m))
(GainBaseControlC b z m)
z
a)
-> (forall a.
Algebra'
(Derivs (GainBaseControlC b z m)) (GainBaseControlC b z m) a)
-> Carrier (GainBaseControlC b z m)
Algebra'
(Derivs (GainBaseControlC b z m)) (GainBaseControlC b z m) a
Algebra'
(Prims (GainBaseControlC b z m)) (GainBaseControlC b z m) a
Reformulation'
(Derivs (GainBaseControlC b z m))
(Prims (GainBaseControlC b z m))
(GainBaseControlC b z m)
z
a
forall a.
Algebra'
(Derivs (GainBaseControlC b z m)) (GainBaseControlC b z m) a
forall a.
Algebra'
(Prims (GainBaseControlC b z m)) (GainBaseControlC b z m) a
forall k (b :: k) k (z :: k) (m :: * -> *).
Carrier m =>
Monad (GainBaseControlC b z m)
forall k (b :: k) k (z :: k) (m :: * -> *) a.
Carrier m =>
Algebra'
(Derivs (GainBaseControlC b z m)) (GainBaseControlC b z m) a
forall k (b :: k) k (z :: k) (m :: * -> *) a.
Carrier m =>
Algebra'
(Prims (GainBaseControlC b z m)) (GainBaseControlC b z m) a
forall k (b :: k) k (z :: k) (m :: * -> *) (z :: * -> *) a.
(Carrier m, Monad z) =>
Reformulation'
(Derivs (GainBaseControlC b z m))
(Prims (GainBaseControlC b z m))
(GainBaseControlC b z m)
z
a
forall (m :: * -> *).
Monad m
-> (forall a. Algebra' (Prims m) m a)
-> (forall (z :: * -> *) a.
Monad z =>
Reformulation' (Derivs m) (Prims m) m z a)
-> (forall a. Algebra' (Derivs m) m a)
-> Carrier m
forall (z :: * -> *) a.
Monad z =>
Reformulation'
(Derivs (GainBaseControlC b z m))
(Prims (GainBaseControlC b z m))
(GainBaseControlC b z m)
z
a
algDerivs :: Algebra'
(Derivs (GainBaseControlC b z m)) (GainBaseControlC b z m) a
$calgDerivs :: forall k (b :: k) k (z :: k) (m :: * -> *) a.
Carrier m =>
Algebra'
(Derivs (GainBaseControlC b z m)) (GainBaseControlC b z m) a
reformulate :: Reformulation'
(Derivs (GainBaseControlC b z m))
(Prims (GainBaseControlC b z m))
(GainBaseControlC b z m)
z
a
$creformulate :: forall k (b :: k) k (z :: k) (m :: * -> *) (z :: * -> *) a.
(Carrier m, Monad z) =>
Reformulation'
(Derivs (GainBaseControlC b z m))
(Prims (GainBaseControlC b z m))
(GainBaseControlC b z m)
z
a
algPrims :: Algebra'
(Prims (GainBaseControlC b z m)) (GainBaseControlC b z m) a
$calgPrims :: forall k (b :: k) k (z :: k) (m :: * -> *) a.
Carrier m =>
Algebra'
(Prims (GainBaseControlC b z m)) (GainBaseControlC b z m) a
$cp1Carrier :: forall k (b :: k) k (z :: k) (m :: * -> *).
Carrier m =>
Monad (GainBaseControlC b z m)
Carrier
)
deriving (m a -> GainBaseControlC b z m a
(forall (m :: * -> *) a.
Monad m =>
m a -> GainBaseControlC b z m a)
-> MonadTrans (GainBaseControlC b z)
forall k (b :: k) k (z :: k) (m :: * -> *) a.
Monad m =>
m a -> GainBaseControlC b z m a
forall (m :: * -> *) a. Monad m => m a -> GainBaseControlC b z m a
forall (t :: (* -> *) -> * -> *).
(forall (m :: * -> *) a. Monad m => m a -> t m a) -> MonadTrans t
lift :: m a -> GainBaseControlC b z m a
$clift :: forall k (b :: k) k (z :: k) (m :: * -> *) a.
Monad m =>
m a -> GainBaseControlC b z m a
MonadTrans, MonadTrans (GainBaseControlC b z)
m (StT (GainBaseControlC b z) a) -> GainBaseControlC b z m a
MonadTrans (GainBaseControlC b z)
-> (forall (m :: * -> *) a.
Monad m =>
(Run (GainBaseControlC b z) -> m a) -> GainBaseControlC b z m a)
-> (forall (m :: * -> *) a.
Monad m =>
m (StT (GainBaseControlC b z) a) -> GainBaseControlC b z m a)
-> MonadTransControl (GainBaseControlC b z)
(Run (GainBaseControlC b z) -> m a) -> GainBaseControlC b z m a
forall k (b :: k) k (z :: k). MonadTrans (GainBaseControlC b z)
forall k (b :: k) k (z :: k) (m :: * -> *) a.
Monad m =>
m (StT (GainBaseControlC b z) a) -> GainBaseControlC b z m a
forall k (b :: k) k (z :: k) (m :: * -> *) a.
Monad m =>
(Run (GainBaseControlC b z) -> m a) -> GainBaseControlC b z m a
forall (m :: * -> *) a.
Monad m =>
m (StT (GainBaseControlC b z) a) -> GainBaseControlC b z m a
forall (m :: * -> *) a.
Monad m =>
(Run (GainBaseControlC b z) -> m a) -> GainBaseControlC b z m a
forall (t :: (* -> *) -> * -> *).
MonadTrans t
-> (forall (m :: * -> *) a. Monad m => (Run t -> m a) -> t m a)
-> (forall (m :: * -> *) a. Monad m => m (StT t a) -> t m a)
-> MonadTransControl t
restoreT :: m (StT (GainBaseControlC b z) a) -> GainBaseControlC b z m a
$crestoreT :: forall k (b :: k) k (z :: k) (m :: * -> *) a.
Monad m =>
m (StT (GainBaseControlC b z) a) -> GainBaseControlC b z m a
liftWith :: (Run (GainBaseControlC b z) -> m a) -> GainBaseControlC b z m a
$cliftWith :: forall k (b :: k) k (z :: k) (m :: * -> *) a.
Monad m =>
(Run (GainBaseControlC b z) -> m a) -> GainBaseControlC b z m a
$cp1MonadTransControl :: forall k (b :: k) k (z :: k). MonadTrans (GainBaseControlC b z)
MonadTransControl) via IdentityT
instance (Monad m, MonadBase b z, Coercible z m)
=> MonadBase b (GainBaseControlC b z m) where
liftBase :: b α -> GainBaseControlC b z m α
liftBase = z α -> GainBaseControlC b z m α
coerce (z α -> GainBaseControlC b z m α)
-> (b α -> z α) -> b α -> GainBaseControlC b z m α
forall c b a. Coercible c b => (b -> c) -> (a -> b) -> a -> c
#. forall α. MonadBase b z => b α -> z α
forall (b :: * -> *) (m :: * -> *) α. MonadBase b m => b α -> m α
liftBase @_ @z
{-# INLINE liftBase #-}
instance (Monad m, MonadBaseControl b z, Coercible z m)
=> MonadBaseControl b (GainBaseControlC b z m) where
type StM (GainBaseControlC b z m) a = StM z a
liftBaseWith :: (RunInBase (GainBaseControlC b z m) b -> b a)
-> GainBaseControlC b z m a
liftBaseWith RunInBase (GainBaseControlC b z m) b -> b a
m = z a -> GainBaseControlC b z m a
coerce (z a -> GainBaseControlC b z m a)
-> z a -> GainBaseControlC b z m a
forall a b. (a -> b) -> a -> b
$ forall a. MonadBaseControl b z => (RunInBase z b -> b a) -> z a
forall (b :: * -> *) (m :: * -> *) a.
MonadBaseControl b m =>
(RunInBase m b -> b a) -> m a
liftBaseWith @_ @z ((RunInBase z b -> b a) -> z a) -> (RunInBase z b -> b a) -> z a
forall a b. (a -> b) -> a -> b
$ \RunInBase z b
lower -> RunInBase (GainBaseControlC b z m) b -> b a
m ((z a -> b (StM z a)) -> GainBaseControlC b z m a -> b (StM z a)
forall k1 k2 (m :: k1 -> *) (z :: k1 -> *) (n :: k2 -> *)
(y :: k2 -> *) (a :: k1) (b :: k2).
(Coercible m z, Coercible n y) =>
(m a -> n b) -> z a -> y b
coerceTrans z a -> b (StM z a)
RunInBase z b
lower)
{-# INLINE liftBaseWith #-}
restoreM :: StM (GainBaseControlC b z m) a -> GainBaseControlC b z m a
restoreM =
(StM z a -> z a) -> StM z a -> GainBaseControlC b z m a
coerce (StM z a -> z a
forall (b :: * -> *) (m :: * -> *) a.
MonadBaseControl b m =>
StM m a -> m a
restoreM @_ @z @a) :: forall a. StM z a -> GainBaseControlC b z m a
{-# INLINE restoreM #-}
newtype Stateful m a = Stateful { Stateful m a -> StM m a
getStateful :: StM m a }
withLowerToBase :: forall b m a
. Eff (BaseControl b) m
=> (forall f. (forall x. m x -> b (f x)) -> b (f a))
-> m a
withLowerToBase :: (forall (f :: * -> *). (forall x. m x -> b (f x)) -> b (f a))
-> m a
withLowerToBase forall (f :: * -> *). (forall x. m x -> b (f x)) -> b (f a)
main = m (m a) -> m a
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join (m (m a) -> m a) -> m (m a) -> m a
forall a b. (a -> b) -> a -> b
$ BaseControl b m (m a) -> m (m a)
forall (e :: (* -> *) -> * -> *) (m :: * -> *) a.
(Member e (Derivs m), Carrier m) =>
e m a -> m a
send (BaseControl b m (m a) -> m (m a))
-> BaseControl b m (m a) -> m (m a)
forall a b. (a -> b) -> a -> b
$
forall (m :: * -> *) a.
(forall (z :: * -> *).
(MonadBaseControl b z, Coercible z m) =>
Proxy# z -> a)
-> BaseControl b m a
forall (b :: * -> *) (m :: * -> *) a.
(forall (z :: * -> *).
(MonadBaseControl b z, Coercible z m) =>
Proxy# z -> a)
-> BaseControl b m a
GainBaseControl @b ((forall (z :: * -> *).
(MonadBaseControl b z, Coercible z m) =>
Proxy# z -> m a)
-> BaseControl b m (m a))
-> (forall (z :: * -> *).
(MonadBaseControl b z, Coercible z m) =>
Proxy# z -> m a)
-> BaseControl b m (m a)
forall a b. (a -> b) -> a -> b
$ \(Proxy# z
_ :: Proxy# z) -> z a -> m a
forall k (m :: k -> *) (n :: k -> *) (a :: k).
Coercible m n =>
m a -> n a
coerceM (z a -> m a) -> z a -> m a
forall a b. (a -> b) -> a -> b
$ forall a.
MonadBaseControl b z =>
(RunInBase z b -> b (StM z a)) -> z a
forall (b :: * -> *) (m :: * -> *) a.
MonadBaseControl b m =>
(RunInBase m b -> b (StM m a)) -> m a
control @_ @z ((RunInBase z b -> b (StM z a)) -> z a)
-> (RunInBase z b -> b (StM z a)) -> z a
forall a b. (a -> b) -> a -> b
$ \RunInBase z b
lower ->
Stateful z a -> StM z a
forall (m :: * -> *) a. Stateful m a -> StM m a
getStateful @z @a (Stateful z a -> StM z a) -> b (Stateful z a) -> b (StM z a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (forall x. m x -> b (Stateful z x)) -> b (Stateful z a)
forall (f :: * -> *). (forall x. m x -> b (f x)) -> b (f a)
main ((StM z x -> Stateful z x) -> b (StM z x) -> b (Stateful z x)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (forall a. StM z a -> Stateful z a
forall (m :: * -> *) a. StM m a -> Stateful m a
Stateful @z) (b (StM z x) -> b (Stateful z x))
-> (m x -> b (StM z x)) -> m x -> b (Stateful z x)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (z x -> b (StM z x)) -> m x -> b (StM z x)
forall k1 k2 (m :: k1 -> *) (z :: k1 -> *) (n :: k2 -> *)
(y :: k2 -> *) (a :: k1) (b :: k2).
(Coercible m z, Coercible n y) =>
(m a -> n b) -> z a -> y b
coerceTrans z x -> b (StM z x)
RunInBase z b
lower)
{-# INLINE withLowerToBase #-}
gainBaseControl
:: forall b m a
. Eff (BaseControl b) m
=> ( forall z
. (MonadBaseControl b z, Coercible z m)
=> GainBaseControlC b z m a
)
-> m a
gainBaseControl :: (forall (z :: * -> *).
(MonadBaseControl b z, Coercible z m) =>
GainBaseControlC b z m a)
-> m a
gainBaseControl forall (z :: * -> *).
(MonadBaseControl b z, Coercible z m) =>
GainBaseControlC b z m a
main = m (m a) -> m a
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join (m (m a) -> m a) -> m (m a) -> m a
forall a b. (a -> b) -> a -> b
$ BaseControl b m (m a) -> m (m a)
forall (e :: (* -> *) -> * -> *) (m :: * -> *) a.
(Member e (Derivs m), Carrier m) =>
e m a -> m a
send (BaseControl b m (m a) -> m (m a))
-> BaseControl b m (m a) -> m (m a)
forall a b. (a -> b) -> a -> b
$
(forall (z :: * -> *).
(MonadBaseControl b z, Coercible z m) =>
Proxy# z -> m a)
-> BaseControl b m (m a)
forall (b :: * -> *) (m :: * -> *) a.
(forall (z :: * -> *).
(MonadBaseControl b z, Coercible z m) =>
Proxy# z -> a)
-> BaseControl b m a
GainBaseControl @b (\(Proxy# z
_ :: Proxy# z) -> GainBaseControlC b z m a -> m a
forall k (b :: k) k (z :: k) k (m :: k -> *) (a :: k).
GainBaseControlC b z m a -> m a
unGainBaseControlC ((MonadBaseControl b z, Coercible z m) => GainBaseControlC b z m a
forall (z :: * -> *).
(MonadBaseControl b z, Coercible z m) =>
GainBaseControlC b z m a
main @z))
{-# INLINE gainBaseControl #-}
runBaseControl :: Carrier m => BaseControlC m a -> m a
runBaseControl :: BaseControlC m a -> m a
runBaseControl = BaseControlC m a -> m a
forall k (m :: k -> *) (a :: k). BaseControlC m a -> m a
unBaseControlC
{-# INLINE runBaseControl #-}
data BaseControlToFinalH
type BaseControlToFinalC b = InterpretPrimC BaseControlToFinalH (BaseControl b)
instance ( MonadBaseControl b m
, Carrier m
)
=> PrimHandler BaseControlToFinalH (BaseControl b) m where
effPrimHandler :: BaseControl b m x -> m x
effPrimHandler (GainBaseControl forall (z :: * -> *).
(MonadBaseControl b z, Coercible z m) =>
Proxy# z -> x
main) = x -> m x
forall (m :: * -> *) a. Monad m => a -> m a
return (x -> m x) -> x -> m x
forall a b. (a -> b) -> a -> b
$ Proxy# m -> x
forall (z :: * -> *).
(MonadBaseControl b z, Coercible z m) =>
Proxy# z -> x
main (Proxy# m
forall k (a :: k). Proxy# a
proxy# :: Proxy# m)
{-# INLINEABLE effPrimHandler #-}
baseControlToFinal :: (MonadBaseControl b m, Carrier m)
=> BaseControlToFinalC b m a -> m a
baseControlToFinal :: BaseControlToFinalC b m a -> m a
baseControlToFinal = BaseControlToFinalC b m a -> m a
forall h (e :: (* -> *) -> * -> *) (m :: * -> *) a.
PrimHandler h e m =>
InterpretPrimC h e m a -> m a
interpretPrimViaHandler
{-# INLINE baseControlToFinal #-}
powerAlgBaseControl :: forall m p a
. Monad m
=> Algebra' p m a
-> Algebra' (BaseControl m ': p) m a
powerAlgBaseControl :: Algebra' p m a -> Algebra' (BaseControl m : p) m a
powerAlgBaseControl Algebra' p m a
alg = Algebra' p m a
-> (BaseControl m m a -> m a) -> Algebra' (BaseControl m : p) m a
forall (e :: (* -> *) -> * -> *) (r :: [(* -> *) -> * -> *])
(m :: * -> *) a.
RepresentationalEff e =>
Algebra' r m a -> (e m a -> m a) -> Algebra' (e : r) m a
powerAlg Algebra' p m a
alg ((BaseControl m m a -> m a) -> Algebra' (BaseControl m : p) m a)
-> (BaseControl m m a -> m a) -> Algebra' (BaseControl m : p) m a
forall a b. (a -> b) -> a -> b
$ \case
GainBaseControl forall (z :: * -> *).
(MonadBaseControl m z, Coercible z m) =>
Proxy# z -> a
main -> a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (a -> m a) -> a -> m a
forall a b. (a -> b) -> a -> b
$ Proxy# (Itself m) -> a
forall (z :: * -> *).
(MonadBaseControl m z, Coercible z m) =>
Proxy# z -> a
main (Proxy# (Itself m)
forall k (a :: k). Proxy# a
proxy# :: Proxy# (Itself m))
{-# INLINEABLE powerAlgBaseControl #-}
powerAlgBaseControlFinal :: forall b m p a
. MonadBaseControl b m
=> Algebra' p m a
-> Algebra' (BaseControl b ': p) m a
powerAlgBaseControlFinal :: Algebra' p m a -> Algebra' (BaseControl b : p) m a
powerAlgBaseControlFinal Algebra' p m a
alg = Algebra' p m a
-> (BaseControl b m a -> m a) -> Algebra' (BaseControl b : p) m a
forall (e :: (* -> *) -> * -> *) (r :: [(* -> *) -> * -> *])
(m :: * -> *) a.
RepresentationalEff e =>
Algebra' r m a -> (e m a -> m a) -> Algebra' (e : r) m a
powerAlg Algebra' p m a
alg ((BaseControl b m a -> m a) -> Algebra' (BaseControl b : p) m a)
-> (BaseControl b m a -> m a) -> Algebra' (BaseControl b : p) m a
forall a b. (a -> b) -> a -> b
$ \case
GainBaseControl forall (z :: * -> *).
(MonadBaseControl b z, Coercible z m) =>
Proxy# z -> a
main -> a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (a -> m a) -> a -> m a
forall a b. (a -> b) -> a -> b
$ Proxy# m -> a
forall (z :: * -> *).
(MonadBaseControl b z, Coercible z m) =>
Proxy# z -> a
main (Proxy# m
forall k (a :: k). Proxy# a
proxy# :: Proxy# m)
{-# INLINEABLE powerAlgBaseControlFinal #-}