{-# options_haddock prune #-}
module Polysemy.Resume.Interpreter.Scoped where
import GHC.Err (errorWithoutStackTrace)
import Polysemy.Internal (liftSem, restack)
import Polysemy.Internal.Combinators (interpretWeaving)
import Polysemy.Internal.Scoped (OuterRun (OuterRun), Scoped (InScope, Run))
import Polysemy.Internal.Sing (KnownList (singList))
import Polysemy.Internal.Tactics (liftT)
import Polysemy.Internal.Union (Weaving (Weaving), injWeaving, injectMembership, weave)
import Polysemy.Opaque (Opaque (Opaque))
import Polysemy.Resume.Effect.Resumable (Resumable (Resumable), type (!!))
import Polysemy.Resume.Effect.Stop (Stop)
import Polysemy.Resume.Interpreter.Resumable (interpretResumableH)
import Polysemy.Resume.Interpreter.Stop (runStop)
exResumable ::
Functor f =>
f () ->
(f (Either err a) -> x) ->
(f' a' -> a) ->
Sem r (Either err (f (f' a'))) ->
Sem r x
exResumable :: forall {k} (f :: * -> *) err a x (f' :: k -> *) (a' :: k)
(r :: EffectRow).
Functor f =>
f ()
-> (f (Either err a) -> x)
-> (f' a' -> a)
-> Sem r (Either err (f (f' a')))
-> Sem r x
exResumable f ()
s f (Either err a) -> x
ex f' a' -> a
ex' =
(Either err (f (f' a')) -> x)
-> Sem r (Either err (f (f' a'))) -> Sem r x
forall a b. (a -> b) -> Sem r a -> Sem r b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Either err (f (f' a')) -> x)
-> Sem r (Either err (f (f' a'))) -> Sem r x)
-> (Either err (f (f' a')) -> x)
-> Sem r (Either err (f (f' a')))
-> Sem r x
forall a b. (a -> b) -> a -> b
$ f (Either err a) -> x
ex (f (Either err a) -> x)
-> (Either err (f (f' a')) -> f (Either err a))
-> Either err (f (f' a'))
-> x
forall b c a. (b -> c) -> (a -> b) -> a -> c
. \case
Right f (f' a')
a -> a -> Either err a
forall a b. b -> Either a b
Right (a -> Either err a) -> (f' a' -> a) -> f' a' -> Either err a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. f' a' -> a
ex' (f' a' -> Either err a) -> f (f' a') -> f (Either err a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f (f' a')
a
Left err
err -> err -> Either err a
forall a b. a -> Either a b
Left err
err Either err a -> f () -> f (Either err a)
forall a b. a -> f b -> f a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ f ()
s
{-# inline exResumable #-}
runScopedResumable ::
∀ param effect err r .
(∀ q. param -> InterpreterFor effect (Stop err : Opaque q : r)) ->
InterpreterFor (Scoped param effect !! err) r
runScopedResumable :: forall param (effect :: Effect) err (r :: EffectRow).
(forall (q :: Effect).
param -> InterpreterFor effect (Stop err : Opaque q : r))
-> InterpreterFor (Scoped param effect !! err) r
runScopedResumable forall (q :: Effect).
param -> InterpreterFor effect (Stop err : Opaque q : r)
h =
(forall x.
Weaving
(Scoped param effect !! err)
(Sem ((Scoped param effect !! err) : r))
x
-> Sem r x)
-> InterpreterFor (Scoped param effect !! err) r
forall (e :: Effect) (r :: EffectRow).
(forall x. Weaving e (Sem (e : r)) x -> Sem r x)
-> InterpreterFor e r
interpretWeaving \ (Weaving (Resumable (Weaving Scoped param effect (Sem rInitial) a
effect f ()
s' forall x. f (Sem rInitial x) -> Sem r (f x)
wv' f a -> a1
ex' forall x. f x -> Maybe x
_)) f ()
s forall x.
f (Sem rInitial x) -> Sem ((Scoped param effect !! err) : r) (f x)
wv f a -> x
ex forall x. f x -> Maybe x
_) -> case Scoped param effect (Sem rInitial) a
effect of
Run Word
w effect (Sem rInitial) a
_ -> [Char] -> Sem r x
forall a. [Char] -> a
errorWithoutStackTrace ([Char] -> Sem r x) -> [Char] -> Sem r x
forall a b. (a -> b) -> a -> b
$ [Char]
"top level run with depth " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Word -> [Char]
forall b a. (Show a, IsString b) => a -> b
show Word
w
InScope param
param Word -> Sem rInitial a
main ->
f (Sem rInitial (f a))
-> Sem ((Scoped param effect !! err) : r) (f (f a))
forall x.
f (Sem rInitial x) -> Sem ((Scoped param effect !! err) : r) (f x)
wv (f (Sem rInitial a) -> Sem r (f a)
forall x. f (Sem rInitial x) -> Sem r (f x)
wv' (Word -> Sem rInitial a
main Word
0 Sem rInitial a -> f () -> f (Sem rInitial a)
forall a b. a -> f b -> f a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ f ()
s') Sem rInitial (f a) -> f () -> f (Sem rInitial (f a))
forall a b. a -> f b -> f a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ f ()
s)
Sem ((Scoped param effect !! err) : r) (f (f a))
-> (Sem ((Scoped param effect !! err) : r) (f (f a))
-> Sem
((Scoped param effect !! err)
: effect : Opaque (OuterRun effect) : r)
(f (f a)))
-> Sem
((Scoped param effect !! err)
: effect : Opaque (OuterRun effect) : r)
(f (f a))
forall a b. a -> (a -> b) -> b
& Sem ((Scoped param effect !! err) : r) (f (f a))
-> Sem
((Scoped param effect !! err)
: effect : Opaque (OuterRun effect) : r)
(f (f a))
forall (e2 :: Effect) (e3 :: Effect) (e1 :: Effect)
(r :: EffectRow) a.
Sem (e1 : r) a -> Sem (e1 : e2 : e3 : r) a
raiseUnder2
Sem
((Scoped param effect !! err)
: effect : Opaque (OuterRun effect) : r)
(f (f a))
-> (Sem
((Scoped param effect !! err)
: effect : Opaque (OuterRun effect) : r)
(f (f a))
-> Sem (effect : Opaque (OuterRun effect) : r) (f (f a)))
-> Sem (effect : Opaque (OuterRun effect) : r) (f (f a))
forall a b. a -> (a -> b) -> b
& Word
-> InterpreterFor
(Scoped param effect !! err)
(effect : Opaque (OuterRun effect) : r)
go Word
0
Sem (effect : Opaque (OuterRun effect) : r) (f (f a))
-> (Sem (effect : Opaque (OuterRun effect) : r) (f (f a))
-> Sem
(effect : Stop err : Opaque (OuterRun effect) : r) (f (f a)))
-> Sem (effect : Stop err : Opaque (OuterRun effect) : r) (f (f a))
forall a b. a -> (a -> b) -> b
& Sem (effect : Opaque (OuterRun effect) : r) (f (f a))
-> Sem (effect : Stop err : Opaque (OuterRun effect) : r) (f (f a))
forall (e2 :: Effect) (e1 :: Effect) (r :: EffectRow) a.
Sem (e1 : r) a -> Sem (e1 : e2 : r) a
raiseUnder
Sem (effect : Stop err : Opaque (OuterRun effect) : r) (f (f a))
-> (Sem
(effect : Stop err : Opaque (OuterRun effect) : r) (f (f a))
-> Sem (Stop err : Opaque (OuterRun effect) : r) (f (f a)))
-> Sem (Stop err : Opaque (OuterRun effect) : r) (f (f a))
forall a b. a -> (a -> b) -> b
& param
-> InterpreterFor effect (Stop err : Opaque (OuterRun effect) : r)
forall (q :: Effect).
param -> InterpreterFor effect (Stop err : Opaque q : r)
h param
param
Sem (Stop err : Opaque (OuterRun effect) : r) (f (f a))
-> (Sem (Stop err : Opaque (OuterRun effect) : r) (f (f a))
-> Sem (Opaque (OuterRun effect) : r) (Either err (f (f a))))
-> Sem (Opaque (OuterRun effect) : r) (Either err (f (f a)))
forall a b. a -> (a -> b) -> b
& Sem (Stop err : Opaque (OuterRun effect) : r) (f (f a))
-> Sem (Opaque (OuterRun effect) : r) (Either err (f (f a)))
forall err (r :: EffectRow) a.
Sem (Stop err : r) a -> Sem r (Either err a)
runStop
Sem (Opaque (OuterRun effect) : r) (Either err (f (f a)))
-> (Sem (Opaque (OuterRun effect) : r) (Either err (f (f a)))
-> Sem r (Either err (f (f a))))
-> Sem r (Either err (f (f a)))
forall a b. a -> (a -> b) -> b
& (forall (rInitial :: EffectRow) x.
Opaque (OuterRun effect) (Sem rInitial) x
-> Tactical (Opaque (OuterRun effect)) (Sem rInitial) r x)
-> Sem (Opaque (OuterRun effect) : r) (Either err (f (f a)))
-> Sem r (Either err (f (f a)))
forall (e :: Effect) (r :: EffectRow) a.
(forall (rInitial :: EffectRow) x.
e (Sem rInitial) x -> Tactical e (Sem rInitial) r x)
-> Sem (e : r) a -> Sem r a
interpretH (\(Opaque (OuterRun Word
w effect (Sem rInitial) x
_)) ->
[Char]
-> Sem
(WithTactics (Opaque (OuterRun effect)) f (Sem rInitial) r) (f x)
forall a. [Char] -> a
errorWithoutStackTrace ([Char]
-> Sem
(WithTactics (Opaque (OuterRun effect)) f (Sem rInitial) r) (f x))
-> [Char]
-> Sem
(WithTactics (Opaque (OuterRun effect)) f (Sem rInitial) r) (f x)
forall a b. (a -> b) -> a -> b
$ [Char]
"unhandled OuterRun with depth " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Word -> [Char]
forall b a. (Show a, IsString b) => a -> b
show Word
w)
Sem r (Either err (f (f a)))
-> (Sem r (Either err (f (f a))) -> Sem r x) -> Sem r x
forall a b. a -> (a -> b) -> b
& f ()
-> (f (Either err a1) -> x)
-> (f a -> a1)
-> Sem r (Either err (f (f a)))
-> Sem r x
forall {k} (f :: * -> *) err a x (f' :: k -> *) (a' :: k)
(r :: EffectRow).
Functor f =>
f ()
-> (f (Either err a) -> x)
-> (f' a' -> a)
-> Sem r (Either err (f (f' a')))
-> Sem r x
exResumable f ()
s f a -> x
f (Either err a1) -> x
ex f a -> a1
ex'
where
go' ::
Word ->
InterpreterFor (Opaque (OuterRun effect)) (effect : Opaque (OuterRun effect) : r)
go' :: Word
-> InterpreterFor
(Opaque (OuterRun effect)) (effect : Opaque (OuterRun effect) : r)
go' Word
depth =
(forall x.
Weaving
(Opaque (OuterRun effect))
(Sem
(Opaque (OuterRun effect) : effect : Opaque (OuterRun effect) : r))
x
-> Sem (effect : Opaque (OuterRun effect) : r) x)
-> InterpreterFor
(Opaque (OuterRun effect)) (effect : Opaque (OuterRun effect) : r)
forall (e :: Effect) (r :: EffectRow).
(forall x. Weaving e (Sem (e : r)) x -> Sem r x)
-> InterpreterFor e r
interpretWeaving \ (Weaving sr :: Opaque (OuterRun effect) (Sem rInitial) a
sr@(Opaque (OuterRun Word
w effect (Sem rInitial) a
act)) f ()
s forall x.
f (Sem rInitial x)
-> Sem
(Opaque (OuterRun effect) : effect : Opaque (OuterRun effect) : r)
(f x)
wv f a -> x
ex forall x. f x -> Maybe x
ins) ->
if Word
w Word -> Word -> Bool
forall a. Eq a => a -> a -> Bool
== Word
depth then
Union
(effect : Opaque (OuterRun effect) : r)
(Sem (effect : Opaque (OuterRun effect) : r))
x
-> Sem (effect : Opaque (OuterRun effect) : r) x
forall (r :: EffectRow) a. Union r (Sem r) a -> Sem r a
liftSem (Union
(effect : Opaque (OuterRun effect) : r)
(Sem (effect : Opaque (OuterRun effect) : r))
x
-> Sem (effect : Opaque (OuterRun effect) : r) x)
-> Union
(effect : Opaque (OuterRun effect) : r)
(Sem (effect : Opaque (OuterRun effect) : r))
x
-> Sem (effect : Opaque (OuterRun effect) : r) x
forall a b. (a -> b) -> a -> b
$ Weaving effect (Sem (effect : Opaque (OuterRun effect) : r)) x
-> Union
(effect : Opaque (OuterRun effect) : r)
(Sem (effect : Opaque (OuterRun effect) : r))
x
forall (e :: Effect) (r :: EffectRow) (m :: * -> *) a.
Member e r =>
Weaving e m a -> Union r m a
injWeaving (Weaving effect (Sem (effect : Opaque (OuterRun effect) : r)) x
-> Union
(effect : Opaque (OuterRun effect) : r)
(Sem (effect : Opaque (OuterRun effect) : r))
x)
-> Weaving effect (Sem (effect : Opaque (OuterRun effect) : r)) x
-> Union
(effect : Opaque (OuterRun effect) : r)
(Sem (effect : Opaque (OuterRun effect) : r))
x
forall a b. (a -> b) -> a -> b
$ effect (Sem rInitial) a
-> f ()
-> (forall x.
f (Sem rInitial x)
-> Sem (effect : Opaque (OuterRun effect) : r) (f x))
-> (f a -> x)
-> (forall x. f x -> Maybe x)
-> Weaving effect (Sem (effect : Opaque (OuterRun effect) : r)) x
forall (f :: * -> *) (e :: Effect) (rInitial :: EffectRow) a
resultType (mAfter :: * -> *).
Functor f =>
e (Sem rInitial) a
-> f ()
-> (forall x. f (Sem rInitial x) -> mAfter (f x))
-> (f a -> resultType)
-> (forall x. f x -> Maybe x)
-> Weaving e mAfter resultType
Weaving effect (Sem rInitial) a
act f ()
s (Word
-> InterpreterFor
(Opaque (OuterRun effect)) (effect : Opaque (OuterRun effect) : r)
go' Word
depth (Sem
(Opaque (OuterRun effect) : effect : Opaque (OuterRun effect) : r)
(f x)
-> Sem (effect : Opaque (OuterRun effect) : r) (f x))
-> (f (Sem rInitial x)
-> Sem
(Opaque (OuterRun effect) : effect : Opaque (OuterRun effect) : r)
(f x))
-> f (Sem rInitial x)
-> Sem (effect : Opaque (OuterRun effect) : r) (f x)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. f (Sem rInitial x)
-> Sem
(Opaque (OuterRun effect) : effect : Opaque (OuterRun effect) : r)
(f x)
forall x.
f (Sem rInitial x)
-> Sem
(Opaque (OuterRun effect) : effect : Opaque (OuterRun effect) : r)
(f x)
wv) f a -> x
ex f x -> Maybe x
forall x. f x -> Maybe x
ins
else
Union
(effect : Opaque (OuterRun effect) : r)
(Sem (effect : Opaque (OuterRun effect) : r))
x
-> Sem (effect : Opaque (OuterRun effect) : r) x
forall (r :: EffectRow) a. Union r (Sem r) a -> Sem r a
liftSem (Union
(effect : Opaque (OuterRun effect) : r)
(Sem (effect : Opaque (OuterRun effect) : r))
x
-> Sem (effect : Opaque (OuterRun effect) : r) x)
-> Union
(effect : Opaque (OuterRun effect) : r)
(Sem (effect : Opaque (OuterRun effect) : r))
x
-> Sem (effect : Opaque (OuterRun effect) : r) x
forall a b. (a -> b) -> a -> b
$ Weaving
(Opaque (OuterRun effect))
(Sem (effect : Opaque (OuterRun effect) : r))
x
-> Union
(effect : Opaque (OuterRun effect) : r)
(Sem (effect : Opaque (OuterRun effect) : r))
x
forall (e :: Effect) (r :: EffectRow) (m :: * -> *) a.
Member e r =>
Weaving e m a -> Union r m a
injWeaving (Weaving
(Opaque (OuterRun effect))
(Sem (effect : Opaque (OuterRun effect) : r))
x
-> Union
(effect : Opaque (OuterRun effect) : r)
(Sem (effect : Opaque (OuterRun effect) : r))
x)
-> Weaving
(Opaque (OuterRun effect))
(Sem (effect : Opaque (OuterRun effect) : r))
x
-> Union
(effect : Opaque (OuterRun effect) : r)
(Sem (effect : Opaque (OuterRun effect) : r))
x
forall a b. (a -> b) -> a -> b
$ Opaque (OuterRun effect) (Sem rInitial) a
-> f ()
-> (forall x.
f (Sem rInitial x)
-> Sem (effect : Opaque (OuterRun effect) : r) (f x))
-> (f a -> x)
-> (forall x. f x -> Maybe x)
-> Weaving
(Opaque (OuterRun effect))
(Sem (effect : Opaque (OuterRun effect) : r))
x
forall (f :: * -> *) (e :: Effect) (rInitial :: EffectRow) a
resultType (mAfter :: * -> *).
Functor f =>
e (Sem rInitial) a
-> f ()
-> (forall x. f (Sem rInitial x) -> mAfter (f x))
-> (f a -> resultType)
-> (forall x. f x -> Maybe x)
-> Weaving e mAfter resultType
Weaving Opaque (OuterRun effect) (Sem rInitial) a
sr f ()
s (Word
-> InterpreterFor
(Opaque (OuterRun effect)) (effect : Opaque (OuterRun effect) : r)
go' Word
depth (Sem
(Opaque (OuterRun effect) : effect : Opaque (OuterRun effect) : r)
(f x)
-> Sem (effect : Opaque (OuterRun effect) : r) (f x))
-> (f (Sem rInitial x)
-> Sem
(Opaque (OuterRun effect) : effect : Opaque (OuterRun effect) : r)
(f x))
-> f (Sem rInitial x)
-> Sem (effect : Opaque (OuterRun effect) : r) (f x)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. f (Sem rInitial x)
-> Sem
(Opaque (OuterRun effect) : effect : Opaque (OuterRun effect) : r)
(f x)
forall x.
f (Sem rInitial x)
-> Sem
(Opaque (OuterRun effect) : effect : Opaque (OuterRun effect) : r)
(f x)
wv) f a -> x
ex f x -> Maybe x
forall x. f x -> Maybe x
ins
go ::
Word ->
InterpreterFor (Scoped param effect !! err) (effect : Opaque (OuterRun effect) : r)
go :: Word
-> InterpreterFor
(Scoped param effect !! err)
(effect : Opaque (OuterRun effect) : r)
go Word
depth =
(forall x.
Weaving
(Scoped param effect !! err)
(Sem
((Scoped param effect !! err)
: effect : Opaque (OuterRun effect) : r))
x
-> Sem (effect : Opaque (OuterRun effect) : r) x)
-> InterpreterFor
(Scoped param effect !! err)
(effect : Opaque (OuterRun effect) : r)
forall (e :: Effect) (r :: EffectRow).
(forall x. Weaving e (Sem (e : r)) x -> Sem r x)
-> InterpreterFor e r
interpretWeaving \ (Weaving (Resumable (Weaving Scoped param effect (Sem rInitial) a
effect f ()
s' forall x. f (Sem rInitial x) -> Sem r (f x)
wv' f a -> a1
ex' forall x. f x -> Maybe x
ins')) f ()
s forall x.
f (Sem rInitial x)
-> Sem
((Scoped param effect !! err)
: effect : Opaque (OuterRun effect) : r)
(f x)
wv f a -> x
ex forall x. f x -> Maybe x
ins) -> case Scoped param effect (Sem rInitial) a
effect of
Run Word
w effect (Sem rInitial) a
act
| Word
w Word -> Word -> Bool
forall a. Eq a => a -> a -> Bool
== Word
depth ->
f a -> x
ex (f a -> x) -> (f a1 -> f a) -> f a1 -> x
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a1 -> a) -> f a1 -> f a
forall a b. (a -> b) -> f a -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a1 -> a
a1 -> Either err a1
forall a b. b -> Either a b
Right (f a1 -> x)
-> Sem (effect : Opaque (OuterRun effect) : r) (f a1)
-> Sem (effect : Opaque (OuterRun effect) : r) x
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Union
(effect : Opaque (OuterRun effect) : r)
(Sem (effect : Opaque (OuterRun effect) : r))
(f a1)
-> Sem (effect : Opaque (OuterRun effect) : r) (f a1)
forall (r :: EffectRow) a. Union r (Sem r) a -> Sem r a
liftSem (f ()
-> (forall x.
f (Sem rInitial x)
-> Sem (effect : Opaque (OuterRun effect) : r) (f x))
-> (forall x. f x -> Maybe x)
-> Union (effect : Opaque (OuterRun effect) : r) (Sem rInitial) a1
-> Union
(effect : Opaque (OuterRun effect) : r)
(Sem (effect : Opaque (OuterRun effect) : r))
(f a1)
forall (s :: * -> *) (n :: * -> *) (m :: * -> *) (r :: EffectRow)
a.
(Functor s, Functor n) =>
s ()
-> (forall x. s (m x) -> n (s x))
-> (forall x. s x -> Maybe x)
-> Union r m a
-> Union r n (s a)
weave f ()
s (Word
-> InterpreterFor
(Scoped param effect !! err)
(effect : Opaque (OuterRun effect) : r)
go Word
depth (Sem
((Scoped param effect !! err)
: effect : Opaque (OuterRun effect) : r)
(f x)
-> Sem (effect : Opaque (OuterRun effect) : r) (f x))
-> (f (Sem rInitial x)
-> Sem
((Scoped param effect !! err)
: effect : Opaque (OuterRun effect) : r)
(f x))
-> f (Sem rInitial x)
-> Sem (effect : Opaque (OuterRun effect) : r) (f x)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. f (Sem rInitial x)
-> Sem
((Scoped param effect !! err)
: effect : Opaque (OuterRun effect) : r)
(f x)
forall x.
f (Sem rInitial x)
-> Sem
((Scoped param effect !! err)
: effect : Opaque (OuterRun effect) : r)
(f x)
wv) f x -> Maybe x
forall x. f x -> Maybe x
ins (Weaving effect (Sem rInitial) a1
-> Union (effect : Opaque (OuterRun effect) : r) (Sem rInitial) a1
forall (e :: Effect) (r :: EffectRow) (m :: * -> *) a.
Member e r =>
Weaving e m a -> Union r m a
injWeaving (effect (Sem rInitial) a
-> f ()
-> (forall x. f (Sem rInitial x) -> Sem rInitial (f x))
-> (f a -> a1)
-> (forall x. f x -> Maybe x)
-> Weaving effect (Sem rInitial) a1
forall (f :: * -> *) (e :: Effect) (rInitial :: EffectRow) a
resultType (mAfter :: * -> *).
Functor f =>
e (Sem rInitial) a
-> f ()
-> (forall x. f (Sem rInitial x) -> mAfter (f x))
-> (f a -> resultType)
-> (forall x. f x -> Maybe x)
-> Weaving e mAfter resultType
Weaving effect (Sem rInitial) a
act f ()
s' f (Sem rInitial x) -> Sem rInitial (f x)
f (Sem rInitial x) -> Sem r (f x)
forall x. f (Sem rInitial x) -> Sem rInitial (f x)
forall x. f (Sem rInitial x) -> Sem r (f x)
wv' f a -> a1
ex' f x -> Maybe x
forall x. f x -> Maybe x
ins')))
| Bool
otherwise ->
f a -> x
ex (f a -> x) -> (f a1 -> f a) -> f a1 -> x
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a1 -> a) -> f a1 -> f a
forall a b. (a -> b) -> f a -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a1 -> a
a1 -> Either err a1
forall a b. b -> Either a b
Right (f a1 -> x)
-> Sem (effect : Opaque (OuterRun effect) : r) (f a1)
-> Sem (effect : Opaque (OuterRun effect) : r) x
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Union
(effect : Opaque (OuterRun effect) : r)
(Sem (effect : Opaque (OuterRun effect) : r))
(f a1)
-> Sem (effect : Opaque (OuterRun effect) : r) (f a1)
forall (r :: EffectRow) a. Union r (Sem r) a -> Sem r a
liftSem (f ()
-> (forall x.
f (Sem rInitial x)
-> Sem (effect : Opaque (OuterRun effect) : r) (f x))
-> (forall x. f x -> Maybe x)
-> Union (effect : Opaque (OuterRun effect) : r) (Sem rInitial) a1
-> Union
(effect : Opaque (OuterRun effect) : r)
(Sem (effect : Opaque (OuterRun effect) : r))
(f a1)
forall (s :: * -> *) (n :: * -> *) (m :: * -> *) (r :: EffectRow)
a.
(Functor s, Functor n) =>
s ()
-> (forall x. s (m x) -> n (s x))
-> (forall x. s x -> Maybe x)
-> Union r m a
-> Union r n (s a)
weave f ()
s (Word
-> InterpreterFor
(Scoped param effect !! err)
(effect : Opaque (OuterRun effect) : r)
go Word
depth (Sem
((Scoped param effect !! err)
: effect : Opaque (OuterRun effect) : r)
(f x)
-> Sem (effect : Opaque (OuterRun effect) : r) (f x))
-> (f (Sem rInitial x)
-> Sem
((Scoped param effect !! err)
: effect : Opaque (OuterRun effect) : r)
(f x))
-> f (Sem rInitial x)
-> Sem (effect : Opaque (OuterRun effect) : r) (f x)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. f (Sem rInitial x)
-> Sem
((Scoped param effect !! err)
: effect : Opaque (OuterRun effect) : r)
(f x)
forall x.
f (Sem rInitial x)
-> Sem
((Scoped param effect !! err)
: effect : Opaque (OuterRun effect) : r)
(f x)
wv) f x -> Maybe x
forall x. f x -> Maybe x
ins (Weaving (Opaque (OuterRun effect)) (Sem rInitial) a1
-> Union (effect : Opaque (OuterRun effect) : r) (Sem rInitial) a1
forall (e :: Effect) (r :: EffectRow) (m :: * -> *) a.
Member e r =>
Weaving e m a -> Union r m a
injWeaving (Opaque (OuterRun effect) (Sem rInitial) a
-> f ()
-> (forall x. f (Sem rInitial x) -> Sem rInitial (f x))
-> (f a -> a1)
-> (forall x. f x -> Maybe x)
-> Weaving (Opaque (OuterRun effect)) (Sem rInitial) a1
forall (f :: * -> *) (e :: Effect) (rInitial :: EffectRow) a
resultType (mAfter :: * -> *).
Functor f =>
e (Sem rInitial) a
-> f ()
-> (forall x. f (Sem rInitial x) -> mAfter (f x))
-> (f a -> resultType)
-> (forall x. f x -> Maybe x)
-> Weaving e mAfter resultType
Weaving (OuterRun effect (Sem rInitial) a
-> Opaque (OuterRun effect) (Sem rInitial) a
forall (e :: Effect) (m :: * -> *) a. e m a -> Opaque e m a
Opaque (Word -> effect (Sem rInitial) a -> OuterRun effect (Sem rInitial) a
forall (effect :: Effect) (a :: * -> *) b.
Word -> effect a b -> OuterRun effect a b
OuterRun Word
w effect (Sem rInitial) a
act)) f ()
s' f (Sem rInitial x) -> Sem rInitial (f x)
f (Sem rInitial x) -> Sem r (f x)
forall x. f (Sem rInitial x) -> Sem rInitial (f x)
forall x. f (Sem rInitial x) -> Sem r (f x)
wv' f a -> a1
ex' f x -> Maybe x
forall x. f x -> Maybe x
ins')))
InScope param
param Word -> Sem rInitial a
main -> do
let !depth' :: Word
depth' = Word
depth Word -> Word -> Word
forall a. Num a => a -> a -> a
+ Word
1
f (Sem rInitial (f a))
-> Sem
((Scoped param effect !! err)
: effect : Opaque (OuterRun effect) : r)
(f (f a))
forall x.
f (Sem rInitial x)
-> Sem
((Scoped param effect !! err)
: effect : Opaque (OuterRun effect) : r)
(f x)
wv (f (Sem rInitial a) -> Sem r (f a)
forall x. f (Sem rInitial x) -> Sem r (f x)
wv' (Word -> Sem rInitial a
main Word
depth' Sem rInitial a -> f () -> f (Sem rInitial a)
forall a b. a -> f b -> f a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ f ()
s') Sem rInitial (f a) -> f () -> f (Sem rInitial (f a))
forall a b. a -> f b -> f a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ f ()
s)
Sem
((Scoped param effect !! err)
: effect : Opaque (OuterRun effect) : r)
(f (f a))
-> (Sem
((Scoped param effect !! err)
: effect : Opaque (OuterRun effect) : r)
(f (f a))
-> Sem (effect : Opaque (OuterRun effect) : r) (f (f a)))
-> Sem (effect : Opaque (OuterRun effect) : r) (f (f a))
forall a b. a -> (a -> b) -> b
& Word
-> InterpreterFor
(Scoped param effect !! err)
(effect : Opaque (OuterRun effect) : r)
go Word
depth'
Sem (effect : Opaque (OuterRun effect) : r) (f (f a))
-> (Sem (effect : Opaque (OuterRun effect) : r) (f (f a))
-> Sem
(effect : Stop err : Opaque (OuterRun effect) : r) (f (f a)))
-> Sem (effect : Stop err : Opaque (OuterRun effect) : r) (f (f a))
forall a b. a -> (a -> b) -> b
& Sem (effect : Opaque (OuterRun effect) : r) (f (f a))
-> Sem (effect : Stop err : Opaque (OuterRun effect) : r) (f (f a))
forall (e2 :: Effect) (e1 :: Effect) (r :: EffectRow) a.
Sem (e1 : r) a -> Sem (e1 : e2 : r) a
raiseUnder
Sem (effect : Stop err : Opaque (OuterRun effect) : r) (f (f a))
-> (Sem
(effect : Stop err : Opaque (OuterRun effect) : r) (f (f a))
-> Sem (Stop err : Opaque (OuterRun effect) : r) (f (f a)))
-> Sem (Stop err : Opaque (OuterRun effect) : r) (f (f a))
forall a b. a -> (a -> b) -> b
& param
-> InterpreterFor effect (Stop err : Opaque (OuterRun effect) : r)
forall (q :: Effect).
param -> InterpreterFor effect (Stop err : Opaque q : r)
h param
param
Sem (Stop err : Opaque (OuterRun effect) : r) (f (f a))
-> (Sem (Stop err : Opaque (OuterRun effect) : r) (f (f a))
-> Sem (Opaque (OuterRun effect) : r) (Either err (f (f a))))
-> Sem (Opaque (OuterRun effect) : r) (Either err (f (f a)))
forall a b. a -> (a -> b) -> b
& Sem (Stop err : Opaque (OuterRun effect) : r) (f (f a))
-> Sem (Opaque (OuterRun effect) : r) (Either err (f (f a)))
forall err (r :: EffectRow) a.
Sem (Stop err : r) a -> Sem r (Either err a)
runStop
Sem (Opaque (OuterRun effect) : r) (Either err (f (f a)))
-> (Sem (Opaque (OuterRun effect) : r) (Either err (f (f a)))
-> Sem
(Opaque (OuterRun effect) : effect : Opaque (OuterRun effect) : r)
(Either err (f (f a))))
-> Sem
(Opaque (OuterRun effect) : effect : Opaque (OuterRun effect) : r)
(Either err (f (f a)))
forall a b. a -> (a -> b) -> b
& Sem (Opaque (OuterRun effect) : r) (Either err (f (f a)))
-> Sem
(Opaque (OuterRun effect) : effect : Opaque (OuterRun effect) : r)
(Either err (f (f a)))
forall (e2 :: Effect) (e3 :: Effect) (e1 :: Effect)
(r :: EffectRow) a.
Sem (e1 : r) a -> Sem (e1 : e2 : e3 : r) a
raiseUnder2
Sem
(Opaque (OuterRun effect) : effect : Opaque (OuterRun effect) : r)
(Either err (f (f a)))
-> (Sem
(Opaque (OuterRun effect) : effect : Opaque (OuterRun effect) : r)
(Either err (f (f a)))
-> Sem
(effect : Opaque (OuterRun effect) : r) (Either err (f (f a))))
-> Sem
(effect : Opaque (OuterRun effect) : r) (Either err (f (f a)))
forall a b. a -> (a -> b) -> b
& Word
-> InterpreterFor
(Opaque (OuterRun effect)) (effect : Opaque (OuterRun effect) : r)
go' Word
depth
Sem (effect : Opaque (OuterRun effect) : r) (Either err (f (f a)))
-> (Sem
(effect : Opaque (OuterRun effect) : r) (Either err (f (f a)))
-> Sem (effect : Opaque (OuterRun effect) : r) x)
-> Sem (effect : Opaque (OuterRun effect) : r) x
forall a b. a -> (a -> b) -> b
& f ()
-> (f (Either err a1) -> x)
-> (f a -> a1)
-> Sem
(effect : Opaque (OuterRun effect) : r) (Either err (f (f a)))
-> Sem (effect : Opaque (OuterRun effect) : r) x
forall {k} (f :: * -> *) err a x (f' :: k -> *) (a' :: k)
(r :: EffectRow).
Functor f =>
f ()
-> (f (Either err a) -> x)
-> (f' a' -> a)
-> Sem r (Either err (f (f' a')))
-> Sem r x
exResumable f ()
s f a -> x
f (Either err a1) -> x
ex f a -> a1
ex'
{-# inline runScopedResumable #-}
interpretScopedResumableH ::
∀ param resource effect err r .
(∀ q x . param -> (resource -> Sem (Stop err : Opaque q : r) x) -> Sem (Stop err : Opaque q : r) x) ->
(∀ q r0 x . resource -> effect (Sem r0) x -> Tactical effect (Sem r0) (Stop err : Opaque q : r) x) ->
InterpreterFor (Scoped param effect !! err) r
interpretScopedResumableH :: forall param resource (effect :: Effect) err (r :: EffectRow).
(forall (q :: Effect) x.
param
-> (resource -> Sem (Stop err : Opaque q : r) x)
-> Sem (Stop err : Opaque q : r) x)
-> (forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x
-> Tactical effect (Sem r0) (Stop err : Opaque q : r) x)
-> InterpreterFor (Scoped param effect !! err) r
interpretScopedResumableH forall (q :: Effect) x.
param
-> (resource -> Sem (Stop err : Opaque q : r) x)
-> Sem (Stop err : Opaque q : r) x
withResource forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x
-> Tactical effect (Sem r0) (Stop err : Opaque q : r) x
scopedHandler =
(forall (q :: Effect).
param -> InterpreterFor effect (Stop err : Opaque q : r))
-> InterpreterFor (Scoped param effect !! err) r
forall param (effect :: Effect) err (r :: EffectRow).
(forall (q :: Effect).
param -> InterpreterFor effect (Stop err : Opaque q : r))
-> InterpreterFor (Scoped param effect !! err) r
runScopedResumable \ param
param Sem (effect : Stop err : Opaque q : r) a
sem ->
param
-> (resource -> Sem (Stop err : Opaque q : r) a)
-> Sem (Stop err : Opaque q : r) a
forall (q :: Effect) x.
param
-> (resource -> Sem (Stop err : Opaque q : r) x)
-> Sem (Stop err : Opaque q : r) x
withResource param
param \ resource
r -> (forall (rInitial :: EffectRow) x.
effect (Sem rInitial) x
-> Tactical effect (Sem rInitial) (Stop err : Opaque q : r) x)
-> Sem (effect : Stop err : Opaque q : r) a
-> Sem (Stop err : Opaque q : r) a
forall (e :: Effect) (r :: EffectRow) a.
(forall (rInitial :: EffectRow) x.
e (Sem rInitial) x -> Tactical e (Sem rInitial) r x)
-> Sem (e : r) a -> Sem r a
interpretH (resource
-> effect (Sem rInitial) x
-> Tactical effect (Sem rInitial) (Stop err : Opaque q : r) x
forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x
-> Tactical effect (Sem r0) (Stop err : Opaque q : r) x
scopedHandler resource
r) Sem (effect : Stop err : Opaque q : r) a
sem
interpretScopedResumable ::
∀ param resource effect err r .
(∀ q x . param -> (resource -> Sem (Stop err : Opaque q : r) x) -> Sem (Stop err : Opaque q : r) x) ->
(∀ q r0 x . resource -> effect (Sem r0) x -> Sem (Stop err : Opaque q : r) x) ->
InterpreterFor (Scoped param effect !! err) r
interpretScopedResumable :: forall param resource (effect :: Effect) err (r :: EffectRow).
(forall (q :: Effect) x.
param
-> (resource -> Sem (Stop err : Opaque q : r) x)
-> Sem (Stop err : Opaque q : r) x)
-> (forall (q :: Effect) (r0 :: EffectRow) x.
resource -> effect (Sem r0) x -> Sem (Stop err : Opaque q : r) x)
-> InterpreterFor (Scoped param effect !! err) r
interpretScopedResumable forall (q :: Effect) x.
param
-> (resource -> Sem (Stop err : Opaque q : r) x)
-> Sem (Stop err : Opaque q : r) x
withResource forall (q :: Effect) (r0 :: EffectRow) x.
resource -> effect (Sem r0) x -> Sem (Stop err : Opaque q : r) x
scopedHandler =
(forall (q :: Effect) x.
param
-> (resource -> Sem (Stop err : Opaque q : r) x)
-> Sem (Stop err : Opaque q : r) x)
-> (forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x
-> Tactical effect (Sem r0) (Stop err : Opaque q : r) x)
-> InterpreterFor (Scoped param effect !! err) r
forall param resource (effect :: Effect) err (r :: EffectRow).
(forall (q :: Effect) x.
param
-> (resource -> Sem (Stop err : Opaque q : r) x)
-> Sem (Stop err : Opaque q : r) x)
-> (forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x
-> Tactical effect (Sem r0) (Stop err : Opaque q : r) x)
-> InterpreterFor (Scoped param effect !! err) r
interpretScopedResumableH param
-> (resource -> Sem (Stop err : Opaque q : r) x)
-> Sem (Stop err : Opaque q : r) x
forall (q :: Effect) x.
param
-> (resource -> Sem (Stop err : Opaque q : r) x)
-> Sem (Stop err : Opaque q : r) x
withResource \ resource
r effect (Sem r0) x
e -> Sem (Stop err : Opaque q : r) x
-> Sem
(WithTactics effect f (Sem r0) (Stop err : Opaque q : r)) (f x)
forall (m :: * -> *) (f :: * -> *) (r :: EffectRow) (e :: Effect)
a.
Functor f =>
Sem r a -> Sem (WithTactics e f m r) (f a)
liftT (resource -> effect (Sem r0) x -> Sem (Stop err : Opaque q : r) x
forall (q :: Effect) (r0 :: EffectRow) x.
resource -> effect (Sem r0) x -> Sem (Stop err : Opaque q : r) x
scopedHandler resource
r effect (Sem r0) x
e)
interpretScopedResumable_ ::
∀ param resource effect err r .
(∀ q . param -> Sem (Stop err : Opaque q : r) resource) ->
(∀ q r0 x . resource -> effect (Sem r0) x -> Sem (Stop err : Opaque q : r) x) ->
InterpreterFor (Scoped param effect !! err) r
interpretScopedResumable_ :: forall param resource (effect :: Effect) err (r :: EffectRow).
(forall (q :: Effect).
param -> Sem (Stop err : Opaque q : r) resource)
-> (forall (q :: Effect) (r0 :: EffectRow) x.
resource -> effect (Sem r0) x -> Sem (Stop err : Opaque q : r) x)
-> InterpreterFor (Scoped param effect !! err) r
interpretScopedResumable_ forall (q :: Effect).
param -> Sem (Stop err : Opaque q : r) resource
resource =
(forall (q :: Effect) x.
param
-> (resource -> Sem (Stop err : Opaque q : r) x)
-> Sem (Stop err : Opaque q : r) x)
-> (forall {q :: Effect} {r0 :: EffectRow} {x}.
resource -> effect (Sem r0) x -> Sem (Stop err : Opaque q : r) x)
-> forall {a}.
Sem (Resumable err (Scoped param effect) : r) a -> Sem r a
forall param resource (effect :: Effect) err (r :: EffectRow).
(forall (q :: Effect) x.
param
-> (resource -> Sem (Stop err : Opaque q : r) x)
-> Sem (Stop err : Opaque q : r) x)
-> (forall (q :: Effect) (r0 :: EffectRow) x.
resource -> effect (Sem r0) x -> Sem (Stop err : Opaque q : r) x)
-> InterpreterFor (Scoped param effect !! err) r
interpretScopedResumable \ param
p resource -> Sem (Stop err : Opaque q : r) x
use -> resource -> Sem (Stop err : Opaque q : r) x
use (resource -> Sem (Stop err : Opaque q : r) x)
-> Sem (Stop err : Opaque q : r) resource
-> Sem (Stop err : Opaque q : r) x
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< param -> Sem (Stop err : Opaque q : r) resource
forall (q :: Effect).
param -> Sem (Stop err : Opaque q : r) resource
resource param
p
interpretScopedResumableWithH ::
∀ extra param resource effect err r .
KnownList extra =>
(∀ q x . param -> (resource -> Sem (extra ++ Stop err : Opaque q : r) x) -> Sem (Stop err : Opaque q : r) x) ->
(∀ q r0 x . resource -> effect (Sem r0) x -> Tactical effect (Sem r0) (extra ++ [Stop err, Opaque q] ++ r) x) ->
InterpreterFor (Scoped param effect !! err) r
interpretScopedResumableWithH :: forall (extra :: EffectRow) param resource (effect :: Effect) err
(r :: EffectRow).
KnownList extra =>
(forall (q :: Effect) x.
param
-> (resource -> Sem (extra ++ (Stop err : Opaque q : r)) x)
-> Sem (Stop err : Opaque q : r) x)
-> (forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x
-> Tactical
effect (Sem r0) (extra ++ ('[Stop err, Opaque q] ++ r)) x)
-> InterpreterFor (Scoped param effect !! err) r
interpretScopedResumableWithH forall (q :: Effect) x.
param
-> (resource -> Sem (extra ++ (Stop err : Opaque q : r)) x)
-> Sem (Stop err : Opaque q : r) x
withResource forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x
-> Tactical
effect (Sem r0) (extra ++ ('[Stop err, Opaque q] ++ r)) x
scopedHandler =
(forall (q :: Effect).
param -> InterpreterFor effect (Stop err : Opaque q : r))
-> InterpreterFor (Scoped param effect !! err) r
forall param (effect :: Effect) err (r :: EffectRow).
(forall (q :: Effect).
param -> InterpreterFor effect (Stop err : Opaque q : r))
-> InterpreterFor (Scoped param effect !! err) r
runScopedResumable \ param
param (Sem (effect : Stop err : Opaque q : r) a
sem :: Sem (effect : Stop err : Opaque q : r) x) ->
param
-> (resource -> Sem (extra ++ (Stop err : Opaque q : r)) a)
-> Sem (Stop err : Opaque q : r) a
forall (q :: Effect) x.
param
-> (resource -> Sem (extra ++ (Stop err : Opaque q : r)) x)
-> Sem (Stop err : Opaque q : r) x
withResource param
param \ resource
resource ->
(forall (rInitial :: EffectRow) x.
effect (Sem rInitial) x
-> Tactical
effect (Sem rInitial) (extra ++ (Stop err : Opaque q : r)) x)
-> Sem (effect : (extra ++ (Stop err : Opaque q : r))) a
-> Sem (extra ++ (Stop err : Opaque q : r)) a
forall (e :: Effect) (r :: EffectRow) a.
(forall (rInitial :: EffectRow) x.
e (Sem rInitial) x -> Tactical e (Sem rInitial) r x)
-> Sem (e : r) a -> Sem r a
interpretH (forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x
-> Tactical
effect (Sem r0) (extra ++ ('[Stop err, Opaque q] ++ r)) x
scopedHandler @q resource
resource) (Sem (effect : (extra ++ (Stop err : Opaque q : r))) a
-> Sem (extra ++ (Stop err : Opaque q : r)) a)
-> Sem (effect : (extra ++ (Stop err : Opaque q : r))) a
-> Sem (extra ++ (Stop err : Opaque q : r)) a
forall a b. (a -> b) -> a -> b
$
(forall (e :: Effect).
ElemOf e (effect : Stop err : Opaque q : r)
-> ElemOf e (effect : (extra ++ (Stop err : Opaque q : r))))
-> Sem (effect : Stop err : Opaque q : r) a
-> Sem (effect : (extra ++ (Stop err : Opaque q : r))) a
forall (r :: EffectRow) (r' :: EffectRow) a.
(forall (e :: Effect). ElemOf e r -> ElemOf e r')
-> Sem r a -> Sem r' a
restack (SList '[effect]
-> SList extra
-> ElemOf e (Append '[effect] (Stop err : Opaque q : r))
-> ElemOf e (Append '[effect] (extra ++ (Stop err : Opaque q : r)))
forall {a} (right :: [a]) (e :: a) (left :: [a]) (mid :: [a]).
SList left
-> SList mid
-> ElemOf e (Append left right)
-> ElemOf e (Append left (Append mid right))
injectMembership (forall (l :: EffectRow). KnownList l => SList l
forall {k} (l :: [k]). KnownList l => SList l
singList @'[effect]) (forall (l :: EffectRow). KnownList l => SList l
forall {k} (l :: [k]). KnownList l => SList l
singList @extra)) (Sem (effect : Stop err : Opaque q : r) a
-> Sem (effect : (extra ++ (Stop err : Opaque q : r))) a)
-> Sem (effect : Stop err : Opaque q : r) a
-> Sem (effect : (extra ++ (Stop err : Opaque q : r))) a
forall a b. (a -> b) -> a -> b
$
Sem (effect : Stop err : Opaque q : r) a
sem
interpretScopedResumableWith ::
∀ extra param resource effect err r .
KnownList extra =>
(∀ q x . param -> (resource -> Sem (extra ++ Stop err : Opaque q : r) x) -> Sem (Stop err : Opaque q : r) x) ->
(∀ q r0 x . resource -> effect (Sem r0) x -> Sem (extra ++ Stop err : Opaque q : r) x) ->
InterpreterFor (Scoped param effect !! err) r
interpretScopedResumableWith :: forall (extra :: EffectRow) param resource (effect :: Effect) err
(r :: EffectRow).
KnownList extra =>
(forall (q :: Effect) x.
param
-> (resource -> Sem (extra ++ (Stop err : Opaque q : r)) x)
-> Sem (Stop err : Opaque q : r) x)
-> (forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x -> Sem (extra ++ (Stop err : Opaque q : r)) x)
-> InterpreterFor (Scoped param effect !! err) r
interpretScopedResumableWith forall (q :: Effect) x.
param
-> (resource -> Sem (extra ++ (Stop err : Opaque q : r)) x)
-> Sem (Stop err : Opaque q : r) x
withResource forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x -> Sem (extra ++ (Stop err : Opaque q : r)) x
scopedHandler =
(forall (q :: Effect).
param -> InterpreterFor effect (Stop err : Opaque q : r))
-> InterpreterFor (Scoped param effect !! err) r
forall param (effect :: Effect) err (r :: EffectRow).
(forall (q :: Effect).
param -> InterpreterFor effect (Stop err : Opaque q : r))
-> InterpreterFor (Scoped param effect !! err) r
runScopedResumable \ param
param (Sem (effect : Stop err : Opaque q : r) a
sem :: Sem (effect : Stop err : Opaque q : r) x) ->
param
-> (resource -> Sem (extra ++ (Stop err : Opaque q : r)) a)
-> Sem (Stop err : Opaque q : r) a
forall (q :: Effect) x.
param
-> (resource -> Sem (extra ++ (Stop err : Opaque q : r)) x)
-> Sem (Stop err : Opaque q : r) x
withResource param
param \ resource
resource ->
Sem (effect : Stop err : Opaque q : r) a
sem
Sem (effect : Stop err : Opaque q : r) a
-> (Sem (effect : Stop err : Opaque q : r) a
-> Sem (effect : (extra ++ (Stop err : Opaque q : r))) a)
-> Sem (effect : (extra ++ (Stop err : Opaque q : r))) a
forall a b. a -> (a -> b) -> b
& (forall (e :: Effect).
ElemOf e (effect : Stop err : Opaque q : r)
-> ElemOf e (effect : (extra ++ (Stop err : Opaque q : r))))
-> Sem (effect : Stop err : Opaque q : r) a
-> Sem (effect : (extra ++ (Stop err : Opaque q : r))) a
forall (r :: EffectRow) (r' :: EffectRow) a.
(forall (e :: Effect). ElemOf e r -> ElemOf e r')
-> Sem r a -> Sem r' a
restack (SList '[effect]
-> SList extra
-> ElemOf e (Append '[effect] (Stop err : Opaque q : r))
-> ElemOf e (Append '[effect] (extra ++ (Stop err : Opaque q : r)))
forall {a} (right :: [a]) (e :: a) (left :: [a]) (mid :: [a]).
SList left
-> SList mid
-> ElemOf e (Append left right)
-> ElemOf e (Append left (Append mid right))
injectMembership (forall (l :: EffectRow). KnownList l => SList l
forall {k} (l :: [k]). KnownList l => SList l
singList @'[effect]) (forall (l :: EffectRow). KnownList l => SList l
forall {k} (l :: [k]). KnownList l => SList l
singList @extra))
Sem (effect : (extra ++ (Stop err : Opaque q : r))) a
-> (Sem (effect : (extra ++ (Stop err : Opaque q : r))) a
-> Sem (extra ++ (Stop err : Opaque q : r)) a)
-> Sem (extra ++ (Stop err : Opaque q : r)) a
forall a b. a -> (a -> b) -> b
& (forall (rInitial :: EffectRow) x.
effect (Sem rInitial) x
-> Tactical
effect (Sem rInitial) (extra ++ (Stop err : Opaque q : r)) x)
-> Sem (effect : (extra ++ (Stop err : Opaque q : r))) a
-> Sem (extra ++ (Stop err : Opaque q : r)) a
forall (e :: Effect) (r :: EffectRow) a.
(forall (rInitial :: EffectRow) x.
e (Sem rInitial) x -> Tactical e (Sem rInitial) r x)
-> Sem (e : r) a -> Sem r a
interpretH \ effect (Sem rInitial) x
e -> Sem (extra ++ (Stop err : Opaque q : r)) x
-> Sem
(WithTactics
effect f (Sem rInitial) (extra ++ (Stop err : Opaque q : r)))
(f x)
forall (m :: * -> *) (f :: * -> *) (r :: EffectRow) (e :: Effect)
a.
Functor f =>
Sem r a -> Sem (WithTactics e f m r) (f a)
liftT (forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x -> Sem (extra ++ (Stop err : Opaque q : r)) x
scopedHandler @q resource
resource effect (Sem rInitial) x
e)
interpretScopedResumableWith_ ::
∀ extra param effect err r .
KnownList extra =>
(∀ q x . param -> Sem (extra ++ Stop err : Opaque q : r) x -> Sem (Stop err : Opaque q : r) x) ->
(∀ q r0 x . effect (Sem r0) x -> Sem (extra ++ Stop err : Opaque q : r) x) ->
InterpreterFor (Scoped param effect !! err) r
interpretScopedResumableWith_ :: forall (extra :: EffectRow) param (effect :: Effect) err
(r :: EffectRow).
KnownList extra =>
(forall (q :: Effect) x.
param
-> Sem (extra ++ (Stop err : Opaque q : r)) x
-> Sem (Stop err : Opaque q : r) x)
-> (forall (q :: Effect) (r0 :: EffectRow) x.
effect (Sem r0) x -> Sem (extra ++ (Stop err : Opaque q : r)) x)
-> InterpreterFor (Scoped param effect !! err) r
interpretScopedResumableWith_ forall (q :: Effect) x.
param
-> Sem (extra ++ (Stop err : Opaque q : r)) x
-> Sem (Stop err : Opaque q : r) x
extra forall (q :: Effect) (r0 :: EffectRow) x.
effect (Sem r0) x -> Sem (extra ++ (Stop err : Opaque q : r)) x
scopedHandler =
(forall (q :: Effect).
param -> InterpreterFor effect (Stop err : Opaque q : r))
-> InterpreterFor (Scoped param effect !! err) r
forall param (effect :: Effect) err (r :: EffectRow).
(forall (q :: Effect).
param -> InterpreterFor effect (Stop err : Opaque q : r))
-> InterpreterFor (Scoped param effect !! err) r
runScopedResumable \ param
param (Sem (effect : Stop err : Opaque q : r) a
sem :: Sem (effect : Stop err : Opaque q : r) x) ->
forall (q :: Effect) x.
param
-> Sem (extra ++ (Stop err : Opaque q : r)) x
-> Sem (Stop err : Opaque q : r) x
extra @q param
param (Sem (extra ++ (Stop err : Opaque q : r)) a
-> Sem (Stop err : Opaque q : r) a)
-> Sem (extra ++ (Stop err : Opaque q : r)) a
-> Sem (Stop err : Opaque q : r) a
forall a b. (a -> b) -> a -> b
$
Sem (effect : Stop err : Opaque q : r) a
sem
Sem (effect : Stop err : Opaque q : r) a
-> (Sem (effect : Stop err : Opaque q : r) a
-> Sem (effect : (extra ++ (Stop err : Opaque q : r))) a)
-> Sem (effect : (extra ++ (Stop err : Opaque q : r))) a
forall a b. a -> (a -> b) -> b
& (forall (e :: Effect).
ElemOf e (effect : Stop err : Opaque q : r)
-> ElemOf e (effect : (extra ++ (Stop err : Opaque q : r))))
-> Sem (effect : Stop err : Opaque q : r) a
-> Sem (effect : (extra ++ (Stop err : Opaque q : r))) a
forall (r :: EffectRow) (r' :: EffectRow) a.
(forall (e :: Effect). ElemOf e r -> ElemOf e r')
-> Sem r a -> Sem r' a
restack (SList '[effect]
-> SList extra
-> ElemOf e (Append '[effect] (Stop err : Opaque q : r))
-> ElemOf e (Append '[effect] (extra ++ (Stop err : Opaque q : r)))
forall {a} (right :: [a]) (e :: a) (left :: [a]) (mid :: [a]).
SList left
-> SList mid
-> ElemOf e (Append left right)
-> ElemOf e (Append left (Append mid right))
injectMembership (forall (l :: EffectRow). KnownList l => SList l
forall {k} (l :: [k]). KnownList l => SList l
singList @'[effect]) (forall (l :: EffectRow). KnownList l => SList l
forall {k} (l :: [k]). KnownList l => SList l
singList @extra))
Sem (effect : (extra ++ (Stop err : Opaque q : r))) a
-> (Sem (effect : (extra ++ (Stop err : Opaque q : r))) a
-> Sem (extra ++ (Stop err : Opaque q : r)) a)
-> Sem (extra ++ (Stop err : Opaque q : r)) a
forall a b. a -> (a -> b) -> b
& (forall (rInitial :: EffectRow) x.
effect (Sem rInitial) x
-> Tactical
effect (Sem rInitial) (extra ++ (Stop err : Opaque q : r)) x)
-> Sem (effect : (extra ++ (Stop err : Opaque q : r))) a
-> Sem (extra ++ (Stop err : Opaque q : r)) a
forall (e :: Effect) (r :: EffectRow) a.
(forall (rInitial :: EffectRow) x.
e (Sem rInitial) x -> Tactical e (Sem rInitial) r x)
-> Sem (e : r) a -> Sem r a
interpretH \ effect (Sem rInitial) x
e -> Sem (extra ++ (Stop err : Opaque q : r)) x
-> Sem
(WithTactics
effect f (Sem rInitial) (extra ++ (Stop err : Opaque q : r)))
(f x)
forall (m :: * -> *) (f :: * -> *) (r :: EffectRow) (e :: Effect)
a.
Functor f =>
Sem r a -> Sem (WithTactics e f m r) (f a)
liftT (forall (q :: Effect) (r0 :: EffectRow) x.
effect (Sem r0) x -> Sem (extra ++ (Stop err : Opaque q : r)) x
scopedHandler @q effect (Sem rInitial) x
e)
interpretResumableScopedH ::
∀ param resource effect err r .
(∀ q x . param -> (resource -> Sem (Opaque q : r) x) -> Sem (Opaque q : r) x) ->
(∀ q r0 x . resource -> effect (Sem r0) x -> Tactical (effect !! err) (Sem r0) (Stop err : Opaque q : r) x) ->
InterpreterFor (Scoped param (effect !! err)) r
interpretResumableScopedH :: forall param resource (effect :: Effect) err (r :: EffectRow).
(forall (q :: Effect) x.
param
-> (resource -> Sem (Opaque q : r) x) -> Sem (Opaque q : r) x)
-> (forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x
-> Tactical (effect !! err) (Sem r0) (Stop err : Opaque q : r) x)
-> InterpreterFor (Scoped param (effect !! err)) r
interpretResumableScopedH forall (q :: Effect) x.
param -> (resource -> Sem (Opaque q : r) x) -> Sem (Opaque q : r) x
withResource forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x
-> Tactical (effect !! err) (Sem r0) (Stop err : Opaque q : r) x
scopedHandler =
(forall (q :: Effect).
param -> InterpreterFor (effect !! err) (Opaque q : r))
-> InterpreterFor (Scoped param (effect !! err)) r
forall param (effect :: Effect) (r :: EffectRow).
(forall (q :: Effect).
param -> InterpreterFor effect (Opaque q : r))
-> InterpreterFor (Scoped param effect) r
runScopedNew \ param
param Sem ((effect !! err) : Opaque q : r) a
sem ->
param -> (resource -> Sem (Opaque q : r) a) -> Sem (Opaque q : r) a
forall (q :: Effect) x.
param -> (resource -> Sem (Opaque q : r) x) -> Sem (Opaque q : r) x
withResource param
param \ resource
r ->
(forall x (r0 :: EffectRow).
effect (Sem r0) x
-> Tactical (effect !! err) (Sem r0) (Stop err : Opaque q : r) x)
-> forall {a}.
Sem ((effect !! err) : Opaque q : r) a -> Sem (Opaque q : r) a
forall err (eff :: Effect) (r :: EffectRow).
(forall x (r0 :: EffectRow).
eff (Sem r0) x
-> Tactical (Resumable err eff) (Sem r0) (Stop err : r) x)
-> InterpreterFor (Resumable err eff) r
interpretResumableH (resource
-> effect (Sem r0) x
-> Tactical (effect !! err) (Sem r0) (Stop err : Opaque q : r) x
forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x
-> Tactical (effect !! err) (Sem r0) (Stop err : Opaque q : r) x
scopedHandler resource
r) Sem ((effect !! err) : Opaque q : r) a
sem
interpretResumableScoped ::
∀ param resource effect err r .
(∀ q x . param -> (resource -> Sem (Opaque q : r) x) -> Sem (Opaque q : r) x) ->
(∀ q r0 x . resource -> effect (Sem r0) x -> Sem (Stop err : Opaque q : r) x) ->
InterpreterFor (Scoped param (effect !! err)) r
interpretResumableScoped :: forall param resource (effect :: Effect) err (r :: EffectRow).
(forall (q :: Effect) x.
param
-> (resource -> Sem (Opaque q : r) x) -> Sem (Opaque q : r) x)
-> (forall (q :: Effect) (r0 :: EffectRow) x.
resource -> effect (Sem r0) x -> Sem (Stop err : Opaque q : r) x)
-> InterpreterFor (Scoped param (effect !! err)) r
interpretResumableScoped forall (q :: Effect) x.
param -> (resource -> Sem (Opaque q : r) x) -> Sem (Opaque q : r) x
withResource forall (q :: Effect) (r0 :: EffectRow) x.
resource -> effect (Sem r0) x -> Sem (Stop err : Opaque q : r) x
scopedHandler =
(forall (q :: Effect) x.
param
-> (resource -> Sem (Opaque q : r) x) -> Sem (Opaque q : r) x)
-> (forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x
-> Tactical (effect !! err) (Sem r0) (Stop err : Opaque q : r) x)
-> InterpreterFor (Scoped param (effect !! err)) r
forall param resource (effect :: Effect) err (r :: EffectRow).
(forall (q :: Effect) x.
param
-> (resource -> Sem (Opaque q : r) x) -> Sem (Opaque q : r) x)
-> (forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x
-> Tactical (effect !! err) (Sem r0) (Stop err : Opaque q : r) x)
-> InterpreterFor (Scoped param (effect !! err)) r
interpretResumableScopedH param -> (resource -> Sem (Opaque q : r) x) -> Sem (Opaque q : r) x
forall (q :: Effect) x.
param -> (resource -> Sem (Opaque q : r) x) -> Sem (Opaque q : r) x
withResource \ resource
r effect (Sem r0) x
e -> Sem (Stop err : Opaque q : r) x
-> Sem
(WithTactics (effect !! err) f (Sem r0) (Stop err : Opaque q : r))
(f x)
forall (m :: * -> *) (f :: * -> *) (r :: EffectRow) (e :: Effect)
a.
Functor f =>
Sem r a -> Sem (WithTactics e f m r) (f a)
liftT (resource -> effect (Sem r0) x -> Sem (Stop err : Opaque q : r) x
forall (q :: Effect) (r0 :: EffectRow) x.
resource -> effect (Sem r0) x -> Sem (Stop err : Opaque q : r) x
scopedHandler resource
r effect (Sem r0) x
e)
interpretResumableScoped_ ::
∀ param resource effect err r .
(param -> Sem r resource) ->
(∀ q r0 x . resource -> effect (Sem r0) x -> Sem (Stop err : Opaque q : r) x) ->
InterpreterFor (Scoped param (effect !! err)) r
interpretResumableScoped_ :: forall param resource (effect :: Effect) err (r :: EffectRow).
(param -> Sem r resource)
-> (forall (q :: Effect) (r0 :: EffectRow) x.
resource -> effect (Sem r0) x -> Sem (Stop err : Opaque q : r) x)
-> InterpreterFor (Scoped param (effect !! err)) r
interpretResumableScoped_ param -> Sem r resource
resource =
(forall (q :: Effect) x.
param
-> (resource -> Sem (Opaque q : r) x) -> Sem (Opaque q : r) x)
-> (forall {q :: Effect} {r0 :: EffectRow} {x}.
resource -> effect (Sem r0) x -> Sem (Stop err : Opaque q : r) x)
-> forall {a}.
Sem (Scoped param (Resumable err effect) : r) a -> Sem r a
forall param resource (effect :: Effect) err (r :: EffectRow).
(forall (q :: Effect) x.
param
-> (resource -> Sem (Opaque q : r) x) -> Sem (Opaque q : r) x)
-> (forall (q :: Effect) (r0 :: EffectRow) x.
resource -> effect (Sem r0) x -> Sem (Stop err : Opaque q : r) x)
-> InterpreterFor (Scoped param (effect !! err)) r
interpretResumableScoped \ param
p resource -> Sem (Opaque q : r) x
use -> resource -> Sem (Opaque q : r) x
use (resource -> Sem (Opaque q : r) x)
-> Sem (Opaque q : r) resource -> Sem (Opaque q : r) x
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Sem r resource -> Sem (Opaque q : r) resource
forall (e :: Effect) (r :: EffectRow) a. Sem r a -> Sem (e : r) a
raise (param -> Sem r resource
resource param
p)
interpretResumableScopedWithH ::
∀ extra param resource effect err r .
KnownList extra =>
(∀ q x . param -> (resource -> Sem (extra ++ Opaque q : r) x) -> Sem (Opaque q : r) x) ->
(∀ q r0 x . resource -> effect (Sem r0) x -> Tactical (effect !! err) (Sem r0) (Stop err : (extra ++ Opaque q : r)) x) ->
InterpreterFor (Scoped param (effect !! err)) r
interpretResumableScopedWithH :: forall (extra :: EffectRow) param resource (effect :: Effect) err
(r :: EffectRow).
KnownList extra =>
(forall (q :: Effect) x.
param
-> (resource -> Sem (extra ++ (Opaque q : r)) x)
-> Sem (Opaque q : r) x)
-> (forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x
-> Tactical
(effect !! err) (Sem r0) (Stop err : (extra ++ (Opaque q : r))) x)
-> InterpreterFor (Scoped param (effect !! err)) r
interpretResumableScopedWithH forall (q :: Effect) x.
param
-> (resource -> Sem (extra ++ (Opaque q : r)) x)
-> Sem (Opaque q : r) x
withResource forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x
-> Tactical
(effect !! err) (Sem r0) (Stop err : (extra ++ (Opaque q : r))) x
scopedHandler =
(forall (q :: Effect).
param -> InterpreterFor (effect !! err) (Opaque q : r))
-> InterpreterFor (Scoped param (effect !! err)) r
forall param (effect :: Effect) (r :: EffectRow).
(forall (q :: Effect).
param -> InterpreterFor effect (Opaque q : r))
-> InterpreterFor (Scoped param effect) r
runScopedNew \ param
param (Sem ((effect !! err) : Opaque q : r) a
sem :: Sem (effect !! err : Opaque q : r) x) ->
param
-> (resource -> Sem (extra ++ (Opaque q : r)) a)
-> Sem (Opaque q : r) a
forall (q :: Effect) x.
param
-> (resource -> Sem (extra ++ (Opaque q : r)) x)
-> Sem (Opaque q : r) x
withResource param
param \ resource
resource ->
Sem ((effect !! err) : Opaque q : r) a
sem
Sem ((effect !! err) : Opaque q : r) a
-> (Sem ((effect !! err) : Opaque q : r) a
-> Sem ((effect !! err) : (extra ++ (Opaque q : r))) a)
-> Sem ((effect !! err) : (extra ++ (Opaque q : r))) a
forall a b. a -> (a -> b) -> b
& (forall (e :: Effect).
ElemOf e ((effect !! err) : Opaque q : r)
-> ElemOf e ((effect !! err) : (extra ++ (Opaque q : r))))
-> Sem ((effect !! err) : Opaque q : r) a
-> Sem ((effect !! err) : (extra ++ (Opaque q : r))) a
forall (r :: EffectRow) (r' :: EffectRow) a.
(forall (e :: Effect). ElemOf e r -> ElemOf e r')
-> Sem r a -> Sem r' a
restack (SList '[effect !! err]
-> SList extra
-> ElemOf e (Append '[effect !! err] (Opaque q : r))
-> ElemOf e (Append '[effect !! err] (extra ++ (Opaque q : r)))
forall {a} (right :: [a]) (e :: a) (left :: [a]) (mid :: [a]).
SList left
-> SList mid
-> ElemOf e (Append left right)
-> ElemOf e (Append left (Append mid right))
injectMembership (forall (l :: EffectRow). KnownList l => SList l
forall {k} (l :: [k]). KnownList l => SList l
singList @'[effect !! err]) (forall (l :: EffectRow). KnownList l => SList l
forall {k} (l :: [k]). KnownList l => SList l
singList @extra))
Sem ((effect !! err) : (extra ++ (Opaque q : r))) a
-> (Sem ((effect !! err) : (extra ++ (Opaque q : r))) a
-> Sem (extra ++ (Opaque q : r)) a)
-> Sem (extra ++ (Opaque q : r)) a
forall a b. a -> (a -> b) -> b
& (forall x (r0 :: EffectRow).
effect (Sem r0) x
-> Tactical
(effect !! err) (Sem r0) (Stop err : (extra ++ (Opaque q : r))) x)
-> InterpreterFor (effect !! err) (extra ++ (Opaque q : r))
forall err (eff :: Effect) (r :: EffectRow).
(forall x (r0 :: EffectRow).
eff (Sem r0) x
-> Tactical (Resumable err eff) (Sem r0) (Stop err : r) x)
-> InterpreterFor (Resumable err eff) r
interpretResumableH (forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x
-> Tactical
(effect !! err) (Sem r0) (Stop err : (extra ++ (Opaque q : r))) x
scopedHandler @q resource
resource)
interpretResumableScopedWith ::
∀ extra param resource effect err r .
KnownList extra =>
(∀ q x . param -> (resource -> Sem (extra ++ Opaque q : r) x) -> Sem (Opaque q : r) x) ->
(∀ r0 x . resource -> effect (Sem r0) x -> Sem (Stop err : (extra ++ r)) x) ->
InterpreterFor (Scoped param (effect !! err)) r
interpretResumableScopedWith :: forall (extra :: EffectRow) param resource (effect :: Effect) err
(r :: EffectRow).
KnownList extra =>
(forall (q :: Effect) x.
param
-> (resource -> Sem (extra ++ (Opaque q : r)) x)
-> Sem (Opaque q : r) x)
-> (forall (r0 :: EffectRow) x.
resource -> effect (Sem r0) x -> Sem (Stop err : (extra ++ r)) x)
-> InterpreterFor (Scoped param (effect !! err)) r
interpretResumableScopedWith forall (q :: Effect) x.
param
-> (resource -> Sem (extra ++ (Opaque q : r)) x)
-> Sem (Opaque q : r) x
withResource forall (r0 :: EffectRow) x.
resource -> effect (Sem r0) x -> Sem (Stop err : (extra ++ r)) x
scopedHandler =
(forall (q :: Effect).
param -> InterpreterFor (effect !! err) (Opaque q : r))
-> InterpreterFor (Scoped param (effect !! err)) r
forall param (effect :: Effect) (r :: EffectRow).
(forall (q :: Effect).
param -> InterpreterFor effect (Opaque q : r))
-> InterpreterFor (Scoped param effect) r
runScopedNew \ param
param (Sem ((effect !! err) : Opaque q : r) a
sem :: Sem (effect !! err : Opaque q : r) x) ->
param
-> (resource -> Sem (extra ++ (Opaque q : r)) a)
-> Sem (Opaque q : r) a
forall (q :: Effect) x.
param
-> (resource -> Sem (extra ++ (Opaque q : r)) x)
-> Sem (Opaque q : r) x
withResource param
param \resource
resource ->
Sem ((effect !! err) : Opaque q : r) a
sem
Sem ((effect !! err) : Opaque q : r) a
-> (Sem ((effect !! err) : Opaque q : r) a
-> Sem ((effect !! err) : (extra ++ (Opaque q : r))) a)
-> Sem ((effect !! err) : (extra ++ (Opaque q : r))) a
forall a b. a -> (a -> b) -> b
& (forall (e :: Effect).
ElemOf e ((effect !! err) : Opaque q : r)
-> ElemOf e ((effect !! err) : (extra ++ (Opaque q : r))))
-> Sem ((effect !! err) : Opaque q : r) a
-> Sem ((effect !! err) : (extra ++ (Opaque q : r))) a
forall (r :: EffectRow) (r' :: EffectRow) a.
(forall (e :: Effect). ElemOf e r -> ElemOf e r')
-> Sem r a -> Sem r' a
restack (SList '[effect !! err]
-> SList extra
-> ElemOf e (Append '[effect !! err] (Opaque q : r))
-> ElemOf e (Append '[effect !! err] (extra ++ (Opaque q : r)))
forall {a} (right :: [a]) (e :: a) (left :: [a]) (mid :: [a]).
SList left
-> SList mid
-> ElemOf e (Append left right)
-> ElemOf e (Append left (Append mid right))
injectMembership (forall (l :: EffectRow). KnownList l => SList l
forall {k} (l :: [k]). KnownList l => SList l
singList @'[effect !! err]) (forall (l :: EffectRow). KnownList l => SList l
forall {k} (l :: [k]). KnownList l => SList l
singList @extra))
Sem ((effect !! err) : (extra ++ (Opaque q : r))) a
-> (Sem ((effect !! err) : (extra ++ (Opaque q : r))) a
-> Sem (extra ++ (Opaque q : r)) a)
-> Sem (extra ++ (Opaque q : r)) a
forall a b. a -> (a -> b) -> b
& (forall x (r0 :: EffectRow).
effect (Sem r0) x
-> Tactical
(effect !! err) (Sem r0) (Stop err : (extra ++ (Opaque q : r))) x)
-> InterpreterFor (effect !! err) (extra ++ (Opaque q : r))
forall err (eff :: Effect) (r :: EffectRow).
(forall x (r0 :: EffectRow).
eff (Sem r0) x
-> Tactical (Resumable err eff) (Sem r0) (Stop err : r) x)
-> InterpreterFor (Resumable err eff) r
interpretResumableH \ effect (Sem r0) x
e ->
Sem (Stop err : (extra ++ (Opaque q : r))) x
-> Sem
(WithTactics
(effect !! err) f (Sem r0) (Stop err : (extra ++ (Opaque q : r))))
(f x)
forall (m :: * -> *) (f :: * -> *) (r :: EffectRow) (e :: Effect)
a.
Functor f =>
Sem r a -> Sem (WithTactics e f m r) (f a)
liftT (Sem (Stop err : (extra ++ (Opaque q : r))) x
-> Sem
(WithTactics
(effect !! err) f (Sem r0) (Stop err : (extra ++ (Opaque q : r))))
(f x))
-> Sem (Stop err : (extra ++ (Opaque q : r))) x
-> Sem
(WithTactics
(effect !! err) f (Sem r0) (Stop err : (extra ++ (Opaque q : r))))
(f x)
forall a b. (a -> b) -> a -> b
$
(forall (e :: Effect).
ElemOf e (Stop err : (extra ++ r))
-> ElemOf e (Stop err : (extra ++ (Opaque q : r))))
-> Sem (Stop err : (extra ++ r)) x
-> Sem (Stop err : (extra ++ (Opaque q : r))) x
forall (r :: EffectRow) (r' :: EffectRow) a.
(forall (e :: Effect). ElemOf e r -> ElemOf e r')
-> Sem r a -> Sem r' a
restack (forall (right :: EffectRow) (e :: Effect) (left :: EffectRow)
(mid :: EffectRow).
SList left
-> SList mid
-> ElemOf e (Append left right)
-> ElemOf e (Append left (Append mid right))
forall {a} (right :: [a]) (e :: a) (left :: [a]) (mid :: [a]).
SList left
-> SList mid
-> ElemOf e (Append left right)
-> ElemOf e (Append left (Append mid right))
injectMembership @r (forall (l :: EffectRow). KnownList l => SList l
forall {k} (l :: [k]). KnownList l => SList l
singList @(Stop err : extra)) (forall (l :: EffectRow). KnownList l => SList l
forall {k} (l :: [k]). KnownList l => SList l
singList @'[Opaque q])) (resource -> effect (Sem r0) x -> Sem (Stop err : (extra ++ r)) x
forall (r0 :: EffectRow) x.
resource -> effect (Sem r0) x -> Sem (Stop err : (extra ++ r)) x
scopedHandler resource
resource effect (Sem r0) x
e)
interpretResumableScopedWith_ ::
∀ extra param effect err r .
KnownList extra =>
(∀ q x . param -> Sem (extra ++ Opaque q : r) x -> Sem (Opaque q : r) x) ->
(∀ r0 x . effect (Sem r0) x -> Sem (Stop err : (extra ++ r)) x) ->
InterpreterFor (Scoped param (effect !! err)) r
interpretResumableScopedWith_ :: forall (extra :: EffectRow) param (effect :: Effect) err
(r :: EffectRow).
KnownList extra =>
(forall (q :: Effect) x.
param -> Sem (extra ++ (Opaque q : r)) x -> Sem (Opaque q : r) x)
-> (forall (r0 :: EffectRow) x.
effect (Sem r0) x -> Sem (Stop err : (extra ++ r)) x)
-> InterpreterFor (Scoped param (effect !! err)) r
interpretResumableScopedWith_ forall (q :: Effect) x.
param -> Sem (extra ++ (Opaque q : r)) x -> Sem (Opaque q : r) x
extra forall (r0 :: EffectRow) x.
effect (Sem r0) x -> Sem (Stop err : (extra ++ r)) x
scopedHandler =
forall (extra :: EffectRow) param resource (effect :: Effect) err
(r :: EffectRow).
KnownList extra =>
(forall (q :: Effect) x.
param
-> (resource -> Sem (extra ++ (Opaque q : r)) x)
-> Sem (Opaque q : r) x)
-> (forall (r0 :: EffectRow) x.
resource -> effect (Sem r0) x -> Sem (Stop err : (extra ++ r)) x)
-> InterpreterFor (Scoped param (effect !! err)) r
interpretResumableScopedWith @extra @param @() @effect @err @r (\ param
p () -> Sem (extra ++ (Opaque q : r)) x
f -> param -> Sem (extra ++ (Opaque q : r)) x -> Sem (Opaque q : r) x
forall (q :: Effect) x.
param -> Sem (extra ++ (Opaque q : r)) x -> Sem (Opaque q : r) x
extra param
p (() -> Sem (extra ++ (Opaque q : r)) x
f ())) ((effect (Sem r0) x -> Sem (Stop err : (extra ++ r)) x)
-> () -> effect (Sem r0) x -> Sem (Stop err : (extra ++ r)) x
forall a b. a -> b -> a
const effect (Sem r0) x -> Sem (Stop err : (extra ++ r)) x
forall (r0 :: EffectRow) x.
effect (Sem r0) x -> Sem (Stop err : (extra ++ r)) x
scopedHandler)
interpretScopedRH ::
∀ param resource effect eo ei r .
(∀ q x . param -> (resource -> Sem (Stop eo : Opaque q : r) x) -> Sem (Stop eo : Opaque q : r) x) ->
(∀ q r0 x . resource -> effect (Sem r0) x -> Tactical (effect !! ei) (Sem r0) (Stop ei : Stop eo : Opaque q : r) x) ->
InterpreterFor (Scoped param (effect !! ei) !! eo) r
interpretScopedRH :: forall param resource (effect :: Effect) eo ei (r :: EffectRow).
(forall (q :: Effect) x.
param
-> (resource -> Sem (Stop eo : Opaque q : r) x)
-> Sem (Stop eo : Opaque q : r) x)
-> (forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x
-> Tactical
(effect !! ei) (Sem r0) (Stop ei : Stop eo : Opaque q : r) x)
-> InterpreterFor (Scoped param (effect !! ei) !! eo) r
interpretScopedRH forall (q :: Effect) x.
param
-> (resource -> Sem (Stop eo : Opaque q : r) x)
-> Sem (Stop eo : Opaque q : r) x
withResource forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x
-> Tactical
(effect !! ei) (Sem r0) (Stop ei : Stop eo : Opaque q : r) x
scopedHandler =
(forall (q :: Effect).
param -> InterpreterFor (effect !! ei) (Stop eo : Opaque q : r))
-> InterpreterFor (Scoped param (effect !! ei) !! eo) r
forall param (effect :: Effect) err (r :: EffectRow).
(forall (q :: Effect).
param -> InterpreterFor effect (Stop err : Opaque q : r))
-> InterpreterFor (Scoped param effect !! err) r
runScopedResumable \ param
param Sem ((effect !! ei) : Stop eo : Opaque q : r) a
sem ->
param
-> (resource -> Sem (Stop eo : Opaque q : r) a)
-> Sem (Stop eo : Opaque q : r) a
forall (q :: Effect) x.
param
-> (resource -> Sem (Stop eo : Opaque q : r) x)
-> Sem (Stop eo : Opaque q : r) x
withResource param
param \ resource
r ->
(forall x (r0 :: EffectRow).
effect (Sem r0) x
-> Tactical
(effect !! ei) (Sem r0) (Stop ei : Stop eo : Opaque q : r) x)
-> forall {a}.
Sem ((effect !! ei) : Stop eo : Opaque q : r) a
-> Sem (Stop eo : Opaque q : r) a
forall err (eff :: Effect) (r :: EffectRow).
(forall x (r0 :: EffectRow).
eff (Sem r0) x
-> Tactical (Resumable err eff) (Sem r0) (Stop err : r) x)
-> InterpreterFor (Resumable err eff) r
interpretResumableH (resource
-> effect (Sem r0) x
-> Tactical
(effect !! ei) (Sem r0) (Stop ei : Stop eo : Opaque q : r) x
forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x
-> Tactical
(effect !! ei) (Sem r0) (Stop ei : Stop eo : Opaque q : r) x
scopedHandler resource
r) Sem ((effect !! ei) : Stop eo : Opaque q : r) a
sem
interpretScopedR ::
∀ param resource effect eo ei r .
(∀ q x . param -> (resource -> Sem (Stop eo : Opaque q : r) x) -> Sem (Stop eo : Opaque q : r) x) ->
(∀ q r0 x . resource -> effect (Sem r0) x -> Sem (Stop ei : Stop eo : Opaque q : r) x) ->
InterpreterFor (Scoped param (effect !! ei) !! eo) r
interpretScopedR :: forall param resource (effect :: Effect) eo ei (r :: EffectRow).
(forall (q :: Effect) x.
param
-> (resource -> Sem (Stop eo : Opaque q : r) x)
-> Sem (Stop eo : Opaque q : r) x)
-> (forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x -> Sem (Stop ei : Stop eo : Opaque q : r) x)
-> InterpreterFor (Scoped param (effect !! ei) !! eo) r
interpretScopedR forall (q :: Effect) x.
param
-> (resource -> Sem (Stop eo : Opaque q : r) x)
-> Sem (Stop eo : Opaque q : r) x
withResource forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x -> Sem (Stop ei : Stop eo : Opaque q : r) x
scopedHandler =
(forall (q :: Effect) x.
param
-> (resource -> Sem (Stop eo : Opaque q : r) x)
-> Sem (Stop eo : Opaque q : r) x)
-> (forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x
-> Tactical
(effect !! ei) (Sem r0) (Stop ei : Stop eo : Opaque q : r) x)
-> InterpreterFor (Scoped param (effect !! ei) !! eo) r
forall param resource (effect :: Effect) eo ei (r :: EffectRow).
(forall (q :: Effect) x.
param
-> (resource -> Sem (Stop eo : Opaque q : r) x)
-> Sem (Stop eo : Opaque q : r) x)
-> (forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x
-> Tactical
(effect !! ei) (Sem r0) (Stop ei : Stop eo : Opaque q : r) x)
-> InterpreterFor (Scoped param (effect !! ei) !! eo) r
interpretScopedRH param
-> (resource -> Sem (Stop eo : Opaque q : r) x)
-> Sem (Stop eo : Opaque q : r) x
forall (q :: Effect) x.
param
-> (resource -> Sem (Stop eo : Opaque q : r) x)
-> Sem (Stop eo : Opaque q : r) x
withResource \ resource
r effect (Sem r0) x
e -> Sem (Stop ei : Stop eo : Opaque q : r) x
-> Sem
(WithTactics
(effect !! ei) f (Sem r0) (Stop ei : Stop eo : Opaque q : r))
(f x)
forall (m :: * -> *) (f :: * -> *) (r :: EffectRow) (e :: Effect)
a.
Functor f =>
Sem r a -> Sem (WithTactics e f m r) (f a)
liftT (resource
-> effect (Sem r0) x -> Sem (Stop ei : Stop eo : Opaque q : r) x
forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x -> Sem (Stop ei : Stop eo : Opaque q : r) x
scopedHandler resource
r effect (Sem r0) x
e)
interpretScopedR_ ::
∀ param resource effect eo ei r .
(param -> Sem (Stop eo : r) resource) ->
(∀ q r0 x . resource -> effect (Sem r0) x -> Sem (Stop ei : Stop eo : Opaque q : r) x) ->
InterpreterFor (Scoped param (effect !! ei) !! eo) r
interpretScopedR_ :: forall param resource (effect :: Effect) eo ei (r :: EffectRow).
(param -> Sem (Stop eo : r) resource)
-> (forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x -> Sem (Stop ei : Stop eo : Opaque q : r) x)
-> InterpreterFor (Scoped param (effect !! ei) !! eo) r
interpretScopedR_ param -> Sem (Stop eo : r) resource
resource =
(forall (q :: Effect) x.
param
-> (resource -> Sem (Stop eo : Opaque q : r) x)
-> Sem (Stop eo : Opaque q : r) x)
-> (forall {q :: Effect} {r0 :: EffectRow} {x}.
resource
-> effect (Sem r0) x -> Sem (Stop ei : Stop eo : Opaque q : r) x)
-> forall {a}.
Sem (Resumable eo (Scoped param (Resumable ei effect)) : r) a
-> Sem r a
forall param resource (effect :: Effect) eo ei (r :: EffectRow).
(forall (q :: Effect) x.
param
-> (resource -> Sem (Stop eo : Opaque q : r) x)
-> Sem (Stop eo : Opaque q : r) x)
-> (forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x -> Sem (Stop ei : Stop eo : Opaque q : r) x)
-> InterpreterFor (Scoped param (effect !! ei) !! eo) r
interpretScopedR \ param
p resource -> Sem (Stop eo : Opaque q : r) x
use -> resource -> Sem (Stop eo : Opaque q : r) x
use (resource -> Sem (Stop eo : Opaque q : r) x)
-> Sem (Stop eo : Opaque q : r) resource
-> Sem (Stop eo : Opaque q : r) x
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Sem (Stop eo : r) resource -> Sem (Stop eo : Opaque q : r) resource
forall (e2 :: Effect) (e1 :: Effect) (r :: EffectRow) a.
Sem (e1 : r) a -> Sem (e1 : e2 : r) a
raiseUnder (param -> Sem (Stop eo : r) resource
resource param
p)
interpretScopedRWithH ::
∀ extra param resource effect eo ei r .
KnownList extra =>
(∀ q x . param -> (resource -> Sem (extra ++ Stop eo : Opaque q : r) x) -> Sem (Stop eo : Opaque q : r) x) ->
(∀ q r0 x . resource -> effect (Sem r0) x -> Tactical (effect !! ei) (Sem r0) (Stop ei : (extra ++ Stop eo : Opaque q : r)) x) ->
InterpreterFor (Scoped param (effect !! ei) !! eo) r
interpretScopedRWithH :: forall (extra :: EffectRow) param resource (effect :: Effect) eo ei
(r :: EffectRow).
KnownList extra =>
(forall (q :: Effect) x.
param
-> (resource -> Sem (extra ++ (Stop eo : Opaque q : r)) x)
-> Sem (Stop eo : Opaque q : r) x)
-> (forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x
-> Tactical
(effect !! ei)
(Sem r0)
(Stop ei : (extra ++ (Stop eo : Opaque q : r)))
x)
-> InterpreterFor (Scoped param (effect !! ei) !! eo) r
interpretScopedRWithH forall (q :: Effect) x.
param
-> (resource -> Sem (extra ++ (Stop eo : Opaque q : r)) x)
-> Sem (Stop eo : Opaque q : r) x
withResource forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x
-> Tactical
(effect !! ei)
(Sem r0)
(Stop ei : (extra ++ (Stop eo : Opaque q : r)))
x
scopedHandler =
(forall (q :: Effect).
param -> InterpreterFor (effect !! ei) (Stop eo : Opaque q : r))
-> InterpreterFor (Scoped param (effect !! ei) !! eo) r
forall param (effect :: Effect) err (r :: EffectRow).
(forall (q :: Effect).
param -> InterpreterFor effect (Stop err : Opaque q : r))
-> InterpreterFor (Scoped param effect !! err) r
runScopedResumable \ param
param (Sem ((effect !! ei) : Stop eo : Opaque q : r) a
sem :: Sem (effect !! ei : Stop eo : Opaque q : r) x) ->
param
-> (resource -> Sem (extra ++ (Stop eo : Opaque q : r)) a)
-> Sem (Stop eo : Opaque q : r) a
forall (q :: Effect) x.
param
-> (resource -> Sem (extra ++ (Stop eo : Opaque q : r)) x)
-> Sem (Stop eo : Opaque q : r) x
withResource param
param \ resource
resource ->
Sem ((effect !! ei) : Stop eo : Opaque q : r) a
sem
Sem ((effect !! ei) : Stop eo : Opaque q : r) a
-> (Sem ((effect !! ei) : Stop eo : Opaque q : r) a
-> Sem ((effect !! ei) : (extra ++ (Stop eo : Opaque q : r))) a)
-> Sem ((effect !! ei) : (extra ++ (Stop eo : Opaque q : r))) a
forall a b. a -> (a -> b) -> b
& (forall (e :: Effect).
ElemOf e ((effect !! ei) : Stop eo : Opaque q : r)
-> ElemOf e ((effect !! ei) : (extra ++ (Stop eo : Opaque q : r))))
-> Sem ((effect !! ei) : Stop eo : Opaque q : r) a
-> Sem ((effect !! ei) : (extra ++ (Stop eo : Opaque q : r))) a
forall (r :: EffectRow) (r' :: EffectRow) a.
(forall (e :: Effect). ElemOf e r -> ElemOf e r')
-> Sem r a -> Sem r' a
restack (SList '[effect !! ei]
-> SList extra
-> ElemOf e (Append '[effect !! ei] (Stop eo : Opaque q : r))
-> ElemOf
e (Append '[effect !! ei] (extra ++ (Stop eo : Opaque q : r)))
forall {a} (right :: [a]) (e :: a) (left :: [a]) (mid :: [a]).
SList left
-> SList mid
-> ElemOf e (Append left right)
-> ElemOf e (Append left (Append mid right))
injectMembership (forall (l :: EffectRow). KnownList l => SList l
forall {k} (l :: [k]). KnownList l => SList l
singList @'[effect !! ei]) (forall (l :: EffectRow). KnownList l => SList l
forall {k} (l :: [k]). KnownList l => SList l
singList @extra))
Sem ((effect !! ei) : (extra ++ (Stop eo : Opaque q : r))) a
-> (Sem ((effect !! ei) : (extra ++ (Stop eo : Opaque q : r))) a
-> Sem (extra ++ (Stop eo : Opaque q : r)) a)
-> Sem (extra ++ (Stop eo : Opaque q : r)) a
forall a b. a -> (a -> b) -> b
& (forall x (r0 :: EffectRow).
effect (Sem r0) x
-> Tactical
(effect !! ei)
(Sem r0)
(Stop ei : (extra ++ (Stop eo : Opaque q : r)))
x)
-> InterpreterFor
(effect !! ei) (extra ++ (Stop eo : Opaque q : r))
forall err (eff :: Effect) (r :: EffectRow).
(forall x (r0 :: EffectRow).
eff (Sem r0) x
-> Tactical (Resumable err eff) (Sem r0) (Stop err : r) x)
-> InterpreterFor (Resumable err eff) r
interpretResumableH (forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x
-> Tactical
(effect !! ei)
(Sem r0)
(Stop ei : (extra ++ (Stop eo : Opaque q : r)))
x
scopedHandler @q resource
resource)
interpretScopedRWith ::
∀ extra param resource effect eo ei r .
KnownList extra =>
(∀ q x . param -> (resource -> Sem (extra ++ Stop eo : Opaque q : r) x) -> Sem (Stop eo : Opaque q : r) x) ->
(∀ q r0 x . resource -> effect (Sem r0) x -> Sem (Stop ei : (extra ++ Stop eo : Opaque q : r)) x) ->
InterpreterFor (Scoped param (effect !! ei) !! eo) r
interpretScopedRWith :: forall (extra :: EffectRow) param resource (effect :: Effect) eo ei
(r :: EffectRow).
KnownList extra =>
(forall (q :: Effect) x.
param
-> (resource -> Sem (extra ++ (Stop eo : Opaque q : r)) x)
-> Sem (Stop eo : Opaque q : r) x)
-> (forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x
-> Sem (Stop ei : (extra ++ (Stop eo : Opaque q : r))) x)
-> InterpreterFor (Scoped param (effect !! ei) !! eo) r
interpretScopedRWith forall (q :: Effect) x.
param
-> (resource -> Sem (extra ++ (Stop eo : Opaque q : r)) x)
-> Sem (Stop eo : Opaque q : r) x
withResource forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x
-> Sem (Stop ei : (extra ++ (Stop eo : Opaque q : r))) x
scopedHandler =
(forall (q :: Effect).
param -> InterpreterFor (effect !! ei) (Stop eo : Opaque q : r))
-> InterpreterFor (Scoped param (effect !! ei) !! eo) r
forall param (effect :: Effect) err (r :: EffectRow).
(forall (q :: Effect).
param -> InterpreterFor effect (Stop err : Opaque q : r))
-> InterpreterFor (Scoped param effect !! err) r
runScopedResumable \ param
param (Sem ((effect !! ei) : Stop eo : Opaque q : r) a
sem :: Sem (effect !! ei : Stop eo : Opaque q : r) x) ->
param
-> (resource -> Sem (extra ++ (Stop eo : Opaque q : r)) a)
-> Sem (Stop eo : Opaque q : r) a
forall (q :: Effect) x.
param
-> (resource -> Sem (extra ++ (Stop eo : Opaque q : r)) x)
-> Sem (Stop eo : Opaque q : r) x
withResource param
param \ resource
resource ->
Sem ((effect !! ei) : Stop eo : Opaque q : r) a
sem
Sem ((effect !! ei) : Stop eo : Opaque q : r) a
-> (Sem ((effect !! ei) : Stop eo : Opaque q : r) a
-> Sem ((effect !! ei) : (extra ++ (Stop eo : Opaque q : r))) a)
-> Sem ((effect !! ei) : (extra ++ (Stop eo : Opaque q : r))) a
forall a b. a -> (a -> b) -> b
& (forall (e :: Effect).
ElemOf e ((effect !! ei) : Stop eo : Opaque q : r)
-> ElemOf e ((effect !! ei) : (extra ++ (Stop eo : Opaque q : r))))
-> Sem ((effect !! ei) : Stop eo : Opaque q : r) a
-> Sem ((effect !! ei) : (extra ++ (Stop eo : Opaque q : r))) a
forall (r :: EffectRow) (r' :: EffectRow) a.
(forall (e :: Effect). ElemOf e r -> ElemOf e r')
-> Sem r a -> Sem r' a
restack (SList '[effect !! ei]
-> SList extra
-> ElemOf e (Append '[effect !! ei] (Stop eo : Opaque q : r))
-> ElemOf
e (Append '[effect !! ei] (extra ++ (Stop eo : Opaque q : r)))
forall {a} (right :: [a]) (e :: a) (left :: [a]) (mid :: [a]).
SList left
-> SList mid
-> ElemOf e (Append left right)
-> ElemOf e (Append left (Append mid right))
injectMembership (forall (l :: EffectRow). KnownList l => SList l
forall {k} (l :: [k]). KnownList l => SList l
singList @'[effect !! ei]) (forall (l :: EffectRow). KnownList l => SList l
forall {k} (l :: [k]). KnownList l => SList l
singList @extra))
Sem ((effect !! ei) : (extra ++ (Stop eo : Opaque q : r))) a
-> (Sem ((effect !! ei) : (extra ++ (Stop eo : Opaque q : r))) a
-> Sem (extra ++ (Stop eo : Opaque q : r)) a)
-> Sem (extra ++ (Stop eo : Opaque q : r)) a
forall a b. a -> (a -> b) -> b
& (forall x (r0 :: EffectRow).
effect (Sem r0) x
-> Tactical
(effect !! ei)
(Sem r0)
(Stop ei : (extra ++ (Stop eo : Opaque q : r)))
x)
-> InterpreterFor
(effect !! ei) (extra ++ (Stop eo : Opaque q : r))
forall err (eff :: Effect) (r :: EffectRow).
(forall x (r0 :: EffectRow).
eff (Sem r0) x
-> Tactical (Resumable err eff) (Sem r0) (Stop err : r) x)
-> InterpreterFor (Resumable err eff) r
interpretResumableH \ effect (Sem r0) x
e ->
Sem (Stop ei : (extra ++ (Stop eo : Opaque q : r))) x
-> Sem
(WithTactics
(effect !! ei)
f
(Sem r0)
(Stop ei : (extra ++ (Stop eo : Opaque q : r))))
(f x)
forall (m :: * -> *) (f :: * -> *) (r :: EffectRow) (e :: Effect)
a.
Functor f =>
Sem r a -> Sem (WithTactics e f m r) (f a)
liftT (forall (q :: Effect) (r0 :: EffectRow) x.
resource
-> effect (Sem r0) x
-> Sem (Stop ei : (extra ++ (Stop eo : Opaque q : r))) x
scopedHandler @q resource
resource effect (Sem r0) x
e)
interpretScopedRWith_ ::
∀ extra param effect eo ei r .
KnownList extra =>
(∀ q x . param -> Sem (extra ++ Stop eo : Opaque q : r) x -> Sem (Stop eo : Opaque q : r) x) ->
(∀ q r0 x . effect (Sem r0) x -> Sem (Stop ei : (extra ++ Stop eo : Opaque q : r)) x) ->
InterpreterFor (Scoped param (effect !! ei) !! eo) r
interpretScopedRWith_ :: forall (extra :: EffectRow) param (effect :: Effect) eo ei
(r :: EffectRow).
KnownList extra =>
(forall (q :: Effect) x.
param
-> Sem (extra ++ (Stop eo : Opaque q : r)) x
-> Sem (Stop eo : Opaque q : r) x)
-> (forall (q :: Effect) (r0 :: EffectRow) x.
effect (Sem r0) x
-> Sem (Stop ei : (extra ++ (Stop eo : Opaque q : r))) x)
-> InterpreterFor (Scoped param (effect !! ei) !! eo) r
interpretScopedRWith_ forall (q :: Effect) x.
param
-> Sem (extra ++ (Stop eo : Opaque q : r)) x
-> Sem (Stop eo : Opaque q : r) x
extra forall (q :: Effect) (r0 :: EffectRow) x.
effect (Sem r0) x
-> Sem (Stop ei : (extra ++ (Stop eo : Opaque q : r))) x
scopedHandler =
(forall (q :: Effect).
param -> InterpreterFor (effect !! ei) (Stop eo : Opaque q : r))
-> InterpreterFor (Scoped param (effect !! ei) !! eo) r
forall param (effect :: Effect) err (r :: EffectRow).
(forall (q :: Effect).
param -> InterpreterFor effect (Stop err : Opaque q : r))
-> InterpreterFor (Scoped param effect !! err) r
runScopedResumable \ param
param (Sem ((effect !! ei) : Stop eo : Opaque q : r) a
sem :: Sem (effect !! ei : Stop eo : Opaque q : r) x) ->
param
-> Sem (extra ++ (Stop eo : Opaque q : r)) a
-> Sem (Stop eo : Opaque q : r) a
forall (q :: Effect) x.
param
-> Sem (extra ++ (Stop eo : Opaque q : r)) x
-> Sem (Stop eo : Opaque q : r) x
extra param
param do
Sem ((effect !! ei) : Stop eo : Opaque q : r) a
sem
Sem ((effect !! ei) : Stop eo : Opaque q : r) a
-> (Sem ((effect !! ei) : Stop eo : Opaque q : r) a
-> Sem ((effect !! ei) : (extra ++ (Stop eo : Opaque q : r))) a)
-> Sem ((effect !! ei) : (extra ++ (Stop eo : Opaque q : r))) a
forall a b. a -> (a -> b) -> b
& (forall (e :: Effect).
ElemOf e ((effect !! ei) : Stop eo : Opaque q : r)
-> ElemOf e ((effect !! ei) : (extra ++ (Stop eo : Opaque q : r))))
-> Sem ((effect !! ei) : Stop eo : Opaque q : r) a
-> Sem ((effect !! ei) : (extra ++ (Stop eo : Opaque q : r))) a
forall (r :: EffectRow) (r' :: EffectRow) a.
(forall (e :: Effect). ElemOf e r -> ElemOf e r')
-> Sem r a -> Sem r' a
restack (SList '[effect !! ei]
-> SList extra
-> ElemOf e (Append '[effect !! ei] (Stop eo : Opaque q : r))
-> ElemOf
e (Append '[effect !! ei] (extra ++ (Stop eo : Opaque q : r)))
forall {a} (right :: [a]) (e :: a) (left :: [a]) (mid :: [a]).
SList left
-> SList mid
-> ElemOf e (Append left right)
-> ElemOf e (Append left (Append mid right))
injectMembership (forall (l :: EffectRow). KnownList l => SList l
forall {k} (l :: [k]). KnownList l => SList l
singList @'[effect !! ei]) (forall (l :: EffectRow). KnownList l => SList l
forall {k} (l :: [k]). KnownList l => SList l
singList @extra))
Sem ((effect !! ei) : (extra ++ (Stop eo : Opaque q : r))) a
-> (Sem ((effect !! ei) : (extra ++ (Stop eo : Opaque q : r))) a
-> Sem (extra ++ (Stop eo : Opaque q : r)) a)
-> Sem (extra ++ (Stop eo : Opaque q : r)) a
forall a b. a -> (a -> b) -> b
& (forall x (r0 :: EffectRow).
effect (Sem r0) x
-> Tactical
(effect !! ei)
(Sem r0)
(Stop ei : (extra ++ (Stop eo : Opaque q : r)))
x)
-> InterpreterFor
(effect !! ei) (extra ++ (Stop eo : Opaque q : r))
forall err (eff :: Effect) (r :: EffectRow).
(forall x (r0 :: EffectRow).
eff (Sem r0) x
-> Tactical (Resumable err eff) (Sem r0) (Stop err : r) x)
-> InterpreterFor (Resumable err eff) r
interpretResumableH \ effect (Sem r0) x
e ->
Sem (Stop ei : (extra ++ (Stop eo : Opaque q : r))) x
-> Sem
(WithTactics
(effect !! ei)
f
(Sem r0)
(Stop ei : (extra ++ (Stop eo : Opaque q : r))))
(f x)
forall (m :: * -> *) (f :: * -> *) (r :: EffectRow) (e :: Effect)
a.
Functor f =>
Sem r a -> Sem (WithTactics e f m r) (f a)
liftT (forall (q :: Effect) (r0 :: EffectRow) x.
effect (Sem r0) x
-> Sem (Stop ei : (extra ++ (Stop eo : Opaque q : r))) x
scopedHandler @q effect (Sem r0) x
e)