Safe Haskell | None |
---|---|

Language | Haskell2010 |

## Synopsis

- data Strategy m f n z a where
- GetInitialState :: Strategy m f n z (f ())
- HoistInterpretation :: (a -> n b) -> Strategy m f n z (f a -> m (f b))
- GetInspector :: Strategy m f n z (Inspector f)

- type Strategic m n a = forall f. Functor f => Sem (WithStrategy m f n) (m (f a))
- type WithStrategy m f n = '[Strategy m f n]
- runStrategy :: Functor f => Sem '[Strategy m f n] a -> f () -> (forall x. f (n x) -> m (f x)) -> (forall x. f x -> Maybe x) -> a
- getInspectorS :: forall m f n. Sem (WithStrategy m f n) (Inspector f)
- getInitialStateS :: forall m f n. Sem (WithStrategy m f n) (f ())
- pureS :: Applicative m => a -> Strategic m n a
- liftS :: Functor m => m a -> Strategic m n a
- runS :: n a -> Sem (WithStrategy m f n) (m (f a))
- bindS :: (a -> n b) -> Sem (WithStrategy m f n) (f a -> m (f b))

# Documentation

data Strategy m f n z a where Source #

GetInitialState :: Strategy m f n z (f ()) | |

HoistInterpretation :: (a -> n b) -> Strategy m f n z (f a -> m (f b)) | |

GetInspector :: Strategy m f n z (Inspector f) |

type WithStrategy m f n = '[Strategy m f n] Source #

*Since: 1.2.0.0*

runStrategy :: Functor f => Sem '[Strategy m f n] a -> f () -> (forall x. f (n x) -> m (f x)) -> (forall x. f x -> Maybe x) -> a Source #

Internal function to process Strategies in terms of
`withWeavingToFinal`

.

*Since: 1.2.0.0*

getInspectorS :: forall m f n. Sem (WithStrategy m f n) (Inspector f) Source #

Get a natural transformation capable of potentially inspecting values
inside of `f`

. Binding the result of `getInspectorS`

produces a function that
can sometimes peek inside values returned by `bindS`

.

This is often useful for running callback functions that are not managed by polysemy code.

See also `getInspectorT`

*Since: 1.2.0.0*

getInitialStateS :: forall m f n. Sem (WithStrategy m f n) (f ()) Source #

liftS :: Functor m => m a -> Strategic m n a Source #

Lifts an action of the final monad into `Strategic`

.

*Note*: you don't need to use this function if you already have a monadic
action with the functorial state threaded into it, by the use of
`runS`

or `bindS`

.
In these cases, you need only use `pure`

to embed the action into the
`Strategic`

environment.

*Since: 1.2.0.0*

runS :: n a -> Sem (WithStrategy m f n) (m (f a)) Source #

Lifts a monadic action into the stateful environment, in terms
of the final monad.
The stateful environment will be the same as the one that the `Strategy`

is initially run in.

Use `bindS`

if you'd prefer to explicitly manage your stateful environment.

*Since: 1.2.0.0*

bindS :: (a -> n b) -> Sem (WithStrategy m f n) (f a -> m (f b)) Source #