{-# LANGUAGE DerivingVia, MagicHash #-}
{-# OPTIONS_HADDOCK not-home #-}
module Control.Effect.Internal.BaseControl where

import Control.Effect.Carrier
import Control.Effect.Internal.Itself
import Control.Effect.Carrier.Internal.Interpret

import Control.Monad.Trans.Identity
import Control.Effect.Type.Internal.BaseControl

import GHC.Exts (Proxy#, proxy#)

data BaseControlH

instance Carrier m => PrimHandler BaseControlH (BaseControl m) m where
  effPrimHandler :: BaseControl m m x -> m x
effPrimHandler (GainBaseControl forall (z :: * -> *).
(MonadBaseControl m 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# (Itself m) -> x
forall (z :: * -> *).
(MonadBaseControl m z, Coercible z m) =>
Proxy# z -> x
main (Proxy# (Itself m)
forall k (a :: k). Proxy# a
proxy# :: Proxy# (Itself m))
  {-# INLINE effPrimHandler #-}

newtype BaseControlC m a = BaseControlC {
    BaseControlC m a -> m a
unBaseControlC :: m a
  }
  deriving ( a -> BaseControlC m b -> BaseControlC m a
(a -> b) -> BaseControlC m a -> BaseControlC m b
(forall a b. (a -> b) -> BaseControlC m a -> BaseControlC m b)
-> (forall a b. a -> BaseControlC m b -> BaseControlC m a)
-> Functor (BaseControlC m)
forall a b. a -> BaseControlC m b -> BaseControlC m a
forall a b. (a -> b) -> BaseControlC m a -> BaseControlC m b
forall (m :: * -> *) a b.
Functor m =>
a -> BaseControlC m b -> BaseControlC m a
forall (m :: * -> *) a b.
Functor m =>
(a -> b) -> BaseControlC m a -> BaseControlC m b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: a -> BaseControlC m b -> BaseControlC m a
$c<$ :: forall (m :: * -> *) a b.
Functor m =>
a -> BaseControlC m b -> BaseControlC m a
fmap :: (a -> b) -> BaseControlC m a -> BaseControlC m b
$cfmap :: forall (m :: * -> *) a b.
Functor m =>
(a -> b) -> BaseControlC m a -> BaseControlC m b
Functor, Functor (BaseControlC m)
a -> BaseControlC m a
Functor (BaseControlC m)
-> (forall a. a -> BaseControlC m a)
-> (forall a b.
    BaseControlC m (a -> b) -> BaseControlC m a -> BaseControlC m b)
-> (forall a b c.
    (a -> b -> c)
    -> BaseControlC m a -> BaseControlC m b -> BaseControlC m c)
-> (forall a b.
    BaseControlC m a -> BaseControlC m b -> BaseControlC m b)
-> (forall a b.
    BaseControlC m a -> BaseControlC m b -> BaseControlC m a)
-> Applicative (BaseControlC m)
BaseControlC m a -> BaseControlC m b -> BaseControlC m b
BaseControlC m a -> BaseControlC m b -> BaseControlC m a
BaseControlC m (a -> b) -> BaseControlC m a -> BaseControlC m b
(a -> b -> c)
-> BaseControlC m a -> BaseControlC m b -> BaseControlC m c
forall a. a -> BaseControlC m a
forall a b.
BaseControlC m a -> BaseControlC m b -> BaseControlC m a
forall a b.
BaseControlC m a -> BaseControlC m b -> BaseControlC m b
forall a b.
BaseControlC m (a -> b) -> BaseControlC m a -> BaseControlC m b
forall a b c.
(a -> b -> c)
-> BaseControlC m a -> BaseControlC m b -> BaseControlC 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 (m :: * -> *). Applicative m => Functor (BaseControlC m)
forall (m :: * -> *) a. Applicative m => a -> BaseControlC m a
forall (m :: * -> *) a b.
Applicative m =>
BaseControlC m a -> BaseControlC m b -> BaseControlC m a
forall (m :: * -> *) a b.
Applicative m =>
BaseControlC m a -> BaseControlC m b -> BaseControlC m b
forall (m :: * -> *) a b.
Applicative m =>
BaseControlC m (a -> b) -> BaseControlC m a -> BaseControlC m b
forall (m :: * -> *) a b c.
Applicative m =>
(a -> b -> c)
-> BaseControlC m a -> BaseControlC m b -> BaseControlC m c
<* :: BaseControlC m a -> BaseControlC m b -> BaseControlC m a
$c<* :: forall (m :: * -> *) a b.
Applicative m =>
BaseControlC m a -> BaseControlC m b -> BaseControlC m a
*> :: BaseControlC m a -> BaseControlC m b -> BaseControlC m b
$c*> :: forall (m :: * -> *) a b.
Applicative m =>
BaseControlC m a -> BaseControlC m b -> BaseControlC m b
liftA2 :: (a -> b -> c)
-> BaseControlC m a -> BaseControlC m b -> BaseControlC m c
$cliftA2 :: forall (m :: * -> *) a b c.
Applicative m =>
(a -> b -> c)
-> BaseControlC m a -> BaseControlC m b -> BaseControlC m c
<*> :: BaseControlC m (a -> b) -> BaseControlC m a -> BaseControlC m b
$c<*> :: forall (m :: * -> *) a b.
Applicative m =>
BaseControlC m (a -> b) -> BaseControlC m a -> BaseControlC m b
pure :: a -> BaseControlC m a
$cpure :: forall (m :: * -> *) a. Applicative m => a -> BaseControlC m a
$cp1Applicative :: forall (m :: * -> *). Applicative m => Functor (BaseControlC m)
Applicative, Applicative (BaseControlC m)
a -> BaseControlC m a
Applicative (BaseControlC m)
-> (forall a b.
    BaseControlC m a -> (a -> BaseControlC m b) -> BaseControlC m b)
-> (forall a b.
    BaseControlC m a -> BaseControlC m b -> BaseControlC m b)
-> (forall a. a -> BaseControlC m a)
-> Monad (BaseControlC m)
BaseControlC m a -> (a -> BaseControlC m b) -> BaseControlC m b
BaseControlC m a -> BaseControlC m b -> BaseControlC m b
forall a. a -> BaseControlC m a
forall a b.
BaseControlC m a -> BaseControlC m b -> BaseControlC m b
forall a b.
BaseControlC m a -> (a -> BaseControlC m b) -> BaseControlC m b
forall (m :: * -> *). Monad m => Applicative (BaseControlC m)
forall (m :: * -> *) a. Monad m => a -> BaseControlC m a
forall (m :: * -> *) a b.
Monad m =>
BaseControlC m a -> BaseControlC m b -> BaseControlC m b
forall (m :: * -> *) a b.
Monad m =>
BaseControlC m a -> (a -> BaseControlC m b) -> BaseControlC 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 -> BaseControlC m a
$creturn :: forall (m :: * -> *) a. Monad m => a -> BaseControlC m a
>> :: BaseControlC m a -> BaseControlC m b -> BaseControlC m b
$c>> :: forall (m :: * -> *) a b.
Monad m =>
BaseControlC m a -> BaseControlC m b -> BaseControlC m b
>>= :: BaseControlC m a -> (a -> BaseControlC m b) -> BaseControlC m b
$c>>= :: forall (m :: * -> *) a b.
Monad m =>
BaseControlC m a -> (a -> BaseControlC m b) -> BaseControlC m b
$cp1Monad :: forall (m :: * -> *). Monad m => Applicative (BaseControlC m)
Monad
           , Applicative (BaseControlC m)
BaseControlC m a
Applicative (BaseControlC m)
-> (forall a. BaseControlC m a)
-> (forall a.
    BaseControlC m a -> BaseControlC m a -> BaseControlC m a)
-> (forall a. BaseControlC m a -> BaseControlC m [a])
-> (forall a. BaseControlC m a -> BaseControlC m [a])
-> Alternative (BaseControlC m)
BaseControlC m a -> BaseControlC m a -> BaseControlC m a
BaseControlC m a -> BaseControlC m [a]
BaseControlC m a -> BaseControlC m [a]
forall a. BaseControlC m a
forall a. BaseControlC m a -> BaseControlC m [a]
forall a. BaseControlC m a -> BaseControlC m a -> BaseControlC 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
forall (m :: * -> *). Alternative m => Applicative (BaseControlC m)
forall (m :: * -> *) a. Alternative m => BaseControlC m a
forall (m :: * -> *) a.
Alternative m =>
BaseControlC m a -> BaseControlC m [a]
forall (m :: * -> *) a.
Alternative m =>
BaseControlC m a -> BaseControlC m a -> BaseControlC m a
many :: BaseControlC m a -> BaseControlC m [a]
$cmany :: forall (m :: * -> *) a.
Alternative m =>
BaseControlC m a -> BaseControlC m [a]
some :: BaseControlC m a -> BaseControlC m [a]
$csome :: forall (m :: * -> *) a.
Alternative m =>
BaseControlC m a -> BaseControlC m [a]
<|> :: BaseControlC m a -> BaseControlC m a -> BaseControlC m a
$c<|> :: forall (m :: * -> *) a.
Alternative m =>
BaseControlC m a -> BaseControlC m a -> BaseControlC m a
empty :: BaseControlC m a
$cempty :: forall (m :: * -> *) a. Alternative m => BaseControlC m a
$cp1Alternative :: forall (m :: * -> *). Alternative m => Applicative (BaseControlC m)
Alternative, Monad (BaseControlC m)
Alternative (BaseControlC m)
BaseControlC m a
Alternative (BaseControlC m)
-> Monad (BaseControlC m)
-> (forall a. BaseControlC m a)
-> (forall a.
    BaseControlC m a -> BaseControlC m a -> BaseControlC m a)
-> MonadPlus (BaseControlC m)
BaseControlC m a -> BaseControlC m a -> BaseControlC m a
forall a. BaseControlC m a
forall a. BaseControlC m a -> BaseControlC m a -> BaseControlC m a
forall (m :: * -> *).
Alternative m
-> Monad m
-> (forall a. m a)
-> (forall a. m a -> m a -> m a)
-> MonadPlus m
forall (m :: * -> *). MonadPlus m => Monad (BaseControlC m)
forall (m :: * -> *). MonadPlus m => Alternative (BaseControlC m)
forall (m :: * -> *) a. MonadPlus m => BaseControlC m a
forall (m :: * -> *) a.
MonadPlus m =>
BaseControlC m a -> BaseControlC m a -> BaseControlC m a
mplus :: BaseControlC m a -> BaseControlC m a -> BaseControlC m a
$cmplus :: forall (m :: * -> *) a.
MonadPlus m =>
BaseControlC m a -> BaseControlC m a -> BaseControlC m a
mzero :: BaseControlC m a
$cmzero :: forall (m :: * -> *) a. MonadPlus m => BaseControlC m a
$cp2MonadPlus :: forall (m :: * -> *). MonadPlus m => Monad (BaseControlC m)
$cp1MonadPlus :: forall (m :: * -> *). MonadPlus m => Alternative (BaseControlC m)
MonadPlus
           , Monad (BaseControlC m)
Monad (BaseControlC m)
-> (forall a. (a -> BaseControlC m a) -> BaseControlC m a)
-> MonadFix (BaseControlC m)
(a -> BaseControlC m a) -> BaseControlC m a
forall a. (a -> BaseControlC m a) -> BaseControlC m a
forall (m :: * -> *).
Monad m -> (forall a. (a -> m a) -> m a) -> MonadFix m
forall (m :: * -> *). MonadFix m => Monad (BaseControlC m)
forall (m :: * -> *) a.
MonadFix m =>
(a -> BaseControlC m a) -> BaseControlC m a
mfix :: (a -> BaseControlC m a) -> BaseControlC m a
$cmfix :: forall (m :: * -> *) a.
MonadFix m =>
(a -> BaseControlC m a) -> BaseControlC m a
$cp1MonadFix :: forall (m :: * -> *). MonadFix m => Monad (BaseControlC m)
MonadFix, Monad (BaseControlC m)
Monad (BaseControlC m)
-> (forall a. String -> BaseControlC m a)
-> MonadFail (BaseControlC m)
String -> BaseControlC m a
forall a. String -> BaseControlC m a
forall (m :: * -> *).
Monad m -> (forall a. String -> m a) -> MonadFail m
forall (m :: * -> *). MonadFail m => Monad (BaseControlC m)
forall (m :: * -> *) a. MonadFail m => String -> BaseControlC m a
fail :: String -> BaseControlC m a
$cfail :: forall (m :: * -> *) a. MonadFail m => String -> BaseControlC m a
$cp1MonadFail :: forall (m :: * -> *). MonadFail m => Monad (BaseControlC m)
MonadFail, Monad (BaseControlC m)
Monad (BaseControlC m)
-> (forall a. IO a -> BaseControlC m a) -> MonadIO (BaseControlC m)
IO a -> BaseControlC m a
forall a. IO a -> BaseControlC m a
forall (m :: * -> *).
Monad m -> (forall a. IO a -> m a) -> MonadIO m
forall (m :: * -> *). MonadIO m => Monad (BaseControlC m)
forall (m :: * -> *) a. MonadIO m => IO a -> BaseControlC m a
liftIO :: IO a -> BaseControlC m a
$cliftIO :: forall (m :: * -> *) a. MonadIO m => IO a -> BaseControlC m a
$cp1MonadIO :: forall (m :: * -> *). MonadIO m => Monad (BaseControlC m)
MonadIO
           , Monad (BaseControlC m)
e -> BaseControlC m a
Monad (BaseControlC m)
-> (forall e a. Exception e => e -> BaseControlC m a)
-> MonadThrow (BaseControlC m)
forall e a. Exception e => e -> BaseControlC m a
forall (m :: * -> *).
Monad m -> (forall e a. Exception e => e -> m a) -> MonadThrow m
forall (m :: * -> *). MonadThrow m => Monad (BaseControlC m)
forall (m :: * -> *) e a.
(MonadThrow m, Exception e) =>
e -> BaseControlC m a
throwM :: e -> BaseControlC m a
$cthrowM :: forall (m :: * -> *) e a.
(MonadThrow m, Exception e) =>
e -> BaseControlC m a
$cp1MonadThrow :: forall (m :: * -> *). MonadThrow m => Monad (BaseControlC m)
MonadThrow, MonadThrow (BaseControlC m)
MonadThrow (BaseControlC m)
-> (forall e a.
    Exception e =>
    BaseControlC m a -> (e -> BaseControlC m a) -> BaseControlC m a)
-> MonadCatch (BaseControlC m)
BaseControlC m a -> (e -> BaseControlC m a) -> BaseControlC m a
forall e a.
Exception e =>
BaseControlC m a -> (e -> BaseControlC m a) -> BaseControlC m a
forall (m :: * -> *).
MonadThrow m
-> (forall e a. Exception e => m a -> (e -> m a) -> m a)
-> MonadCatch m
forall (m :: * -> *). MonadCatch m => MonadThrow (BaseControlC m)
forall (m :: * -> *) e a.
(MonadCatch m, Exception e) =>
BaseControlC m a -> (e -> BaseControlC m a) -> BaseControlC m a
catch :: BaseControlC m a -> (e -> BaseControlC m a) -> BaseControlC m a
$ccatch :: forall (m :: * -> *) e a.
(MonadCatch m, Exception e) =>
BaseControlC m a -> (e -> BaseControlC m a) -> BaseControlC m a
$cp1MonadCatch :: forall (m :: * -> *). MonadCatch m => MonadThrow (BaseControlC m)
MonadCatch, MonadCatch (BaseControlC m)
MonadCatch (BaseControlC m)
-> (forall b.
    ((forall a. BaseControlC m a -> BaseControlC m a)
     -> BaseControlC m b)
    -> BaseControlC m b)
-> (forall b.
    ((forall a. BaseControlC m a -> BaseControlC m a)
     -> BaseControlC m b)
    -> BaseControlC m b)
-> (forall a b c.
    BaseControlC m a
    -> (a -> ExitCase b -> BaseControlC m c)
    -> (a -> BaseControlC m b)
    -> BaseControlC m (b, c))
-> MonadMask (BaseControlC m)
BaseControlC m a
-> (a -> ExitCase b -> BaseControlC m c)
-> (a -> BaseControlC m b)
-> BaseControlC m (b, c)
((forall a. BaseControlC m a -> BaseControlC m a)
 -> BaseControlC m b)
-> BaseControlC m b
((forall a. BaseControlC m a -> BaseControlC m a)
 -> BaseControlC m b)
-> BaseControlC m b
forall b.
((forall a. BaseControlC m a -> BaseControlC m a)
 -> BaseControlC m b)
-> BaseControlC m b
forall a b c.
BaseControlC m a
-> (a -> ExitCase b -> BaseControlC m c)
-> (a -> BaseControlC m b)
-> BaseControlC 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
forall (m :: * -> *). MonadMask m => MonadCatch (BaseControlC m)
forall (m :: * -> *) b.
MonadMask m =>
((forall a. BaseControlC m a -> BaseControlC m a)
 -> BaseControlC m b)
-> BaseControlC m b
forall (m :: * -> *) a b c.
MonadMask m =>
BaseControlC m a
-> (a -> ExitCase b -> BaseControlC m c)
-> (a -> BaseControlC m b)
-> BaseControlC m (b, c)
generalBracket :: BaseControlC m a
-> (a -> ExitCase b -> BaseControlC m c)
-> (a -> BaseControlC m b)
-> BaseControlC m (b, c)
$cgeneralBracket :: forall (m :: * -> *) a b c.
MonadMask m =>
BaseControlC m a
-> (a -> ExitCase b -> BaseControlC m c)
-> (a -> BaseControlC m b)
-> BaseControlC m (b, c)
uninterruptibleMask :: ((forall a. BaseControlC m a -> BaseControlC m a)
 -> BaseControlC m b)
-> BaseControlC m b
$cuninterruptibleMask :: forall (m :: * -> *) b.
MonadMask m =>
((forall a. BaseControlC m a -> BaseControlC m a)
 -> BaseControlC m b)
-> BaseControlC m b
mask :: ((forall a. BaseControlC m a -> BaseControlC m a)
 -> BaseControlC m b)
-> BaseControlC m b
$cmask :: forall (m :: * -> *) b.
MonadMask m =>
((forall a. BaseControlC m a -> BaseControlC m a)
 -> BaseControlC m b)
-> BaseControlC m b
$cp1MonadMask :: forall (m :: * -> *). MonadMask m => MonadCatch (BaseControlC m)
MonadMask
           )
  deriving (m a -> BaseControlC m a
(forall (m :: * -> *) a. Monad m => m a -> BaseControlC m a)
-> MonadTrans BaseControlC
forall (m :: * -> *) a. Monad m => m a -> BaseControlC m a
forall (t :: Effect).
(forall (m :: * -> *) a. Monad m => m a -> t m a) -> MonadTrans t
lift :: m a -> BaseControlC m a
$clift :: forall (m :: * -> *) a. Monad m => m a -> BaseControlC m a
MonadTrans, MonadTrans BaseControlC
m (StT BaseControlC a) -> BaseControlC m a
MonadTrans BaseControlC
-> (forall (m :: * -> *) a.
    Monad m =>
    (Run BaseControlC -> m a) -> BaseControlC m a)
-> (forall (m :: * -> *) a.
    Monad m =>
    m (StT BaseControlC a) -> BaseControlC m a)
-> MonadTransControl BaseControlC
(Run BaseControlC -> m a) -> BaseControlC m a
forall (m :: * -> *) a.
Monad m =>
m (StT BaseControlC a) -> BaseControlC m a
forall (m :: * -> *) a.
Monad m =>
(Run BaseControlC -> m a) -> BaseControlC m a
forall (t :: Effect).
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 BaseControlC a) -> BaseControlC m a
$crestoreT :: forall (m :: * -> *) a.
Monad m =>
m (StT BaseControlC a) -> BaseControlC m a
liftWith :: (Run BaseControlC -> m a) -> BaseControlC m a
$cliftWith :: forall (m :: * -> *) a.
Monad m =>
(Run BaseControlC -> m a) -> BaseControlC m a
$cp1MonadTransControl :: MonadTrans BaseControlC
MonadTransControl) via IdentityT

deriving via InterpretPrimC BaseControlH (BaseControl m) m
    instance Carrier m => Carrier (BaseControlC m)