| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Polysemy.Methodology
Synopsis
- data Methodology b c m a where
- Process :: b -> Methodology b c m c
- process :: forall b c r. MemberWithError (Methodology b c) r => b -> Sem r c
- runMethodologyPure :: forall b c r a. (b -> c) -> Sem (Methodology b c ': r) a -> Sem r a
- runMethodologySem :: forall b c r a. (b -> Sem r c) -> Sem (Methodology b c ': r) a -> Sem r a
- cutMethodology :: forall b c d r a. Members '[Methodology b c, Methodology c d] r => Sem (Methodology b d ': r) a -> Sem r a
- cutMethodology3 :: forall b c d e r a. Members '[Methodology b c, Methodology c d, Methodology d e] r => Sem (Methodology b e ': r) a -> Sem r a
- divideMethodology :: forall b c c' d r a. Members '[Methodology b c, Methodology b c', Methodology (c, c') d] r => Sem (Methodology b d ': r) a -> Sem r a
- decideMethodology :: forall b c c' d r a. Members '[Methodology b (Either c c'), Methodology c d, Methodology c' d] r => Sem (Methodology b d ': r) a -> Sem r a
- teeMethodologyOutput :: forall b c r a. Members '[Output c, Methodology b c] r => Sem r a -> Sem r a
- plugMethodologyInput :: forall b c d r a. Members '[Input b, Methodology (b, c) d] r => Sem (Methodology c d ': r) a -> Sem r a
- runMethodologyAsKVStore :: forall k v r a. Members '[KVStore k v] r => Sem (Methodology k (Maybe v) ': r) a -> Sem r a
- runMethodologyAsKVStoreWithDefault :: forall k v r a. Members '[KVStore k v] r => v -> Sem (Methodology k v ': r) a -> Sem r a
- decomposeMethodology :: forall b f c r a. Members '[Methodology b (HList f), Methodology (HList f) c] r => Sem (Methodology b c ': r) a -> Sem r a
- decomposeMethodology3 :: forall b f g c r a. Members '[Methodology b (HList f), Methodology (HList f) (HList g), Methodology (HList g) c] r => Sem (Methodology b c ': r) a -> Sem r a
- separateMethodologyInitial :: forall b x xs r a. Members '[Methodology b (HList xs), Methodology b x] r => Sem (Methodology b (HList (x ': xs)) ': r) a -> Sem r a
- endMethodologyInitial :: Sem (Methodology b (HList '[]) ': r) a -> Sem r a
- separateMethodologyTerminal :: forall x c xs r a. (Monoid c, Members '[Methodology (HList xs) c, Methodology x c] r) => Sem (Methodology (HList (x ': xs)) c ': r) a -> Sem r a
- endMethodologyTerminal :: Monoid c => Sem (Methodology (HList '[]) c ': r) a -> Sem r a
- fmapMethodology :: forall f b c r a. (Members '[Methodology b c] r, Traversable f) => Sem (Methodology (f b) (f c) ': r) a -> Sem r a
- fmap2Methodology :: forall f g b c r a. (Members '[Methodology b c] r, Traversable f, Traversable g) => Sem (Methodology (f (g b)) (f (g c)) ': (Methodology (g b) (g c) ': r)) a -> Sem r a
- bindMethodology :: forall f b c r a. (Members '[Methodology b (f c)] r, Traversable f, Monad f) => Sem (Methodology (f b) (f c) ': r) a -> Sem r a
- traverseMethodology :: forall t f b c r a. (Members '[Methodology b (f c)] r, Traversable t, Applicative f) => Sem (Methodology (t b) (f (t c)) ': r) a -> Sem r a
Documentation
data Methodology b c m a where Source #
A Methodology generalises a semantic process from b to c.
Constructors
| Process :: b -> Methodology b c m c |
process :: forall b c r. MemberWithError (Methodology b c) r => b -> Sem r c Source #
runMethodologyPure :: forall b c r a. (b -> c) -> Sem (Methodology b c ': r) a -> Sem r a Source #
Run a Methodology using a pure function.
runMethodologySem :: forall b c r a. (b -> Sem r c) -> Sem (Methodology b c ': r) a -> Sem r a Source #
Run a Methodology using a monadic function with effects in r.
cutMethodology :: forall b c d r a. Members '[Methodology b c, Methodology c d] r => Sem (Methodology b d ': r) a -> Sem r a Source #
Cut a Methodology into two pieces at a midpoint.
cutMethodology3 :: forall b c d e r a. Members '[Methodology b c, Methodology c d, Methodology d e] r => Sem (Methodology b e ': r) a -> Sem r a Source #
Cut a Methodology into three pieces using two cuts.
divideMethodology :: forall b c c' d r a. Members '[Methodology b c, Methodology b c', Methodology (c, c') d] r => Sem (Methodology b d ': r) a -> Sem r a Source #
Divide a Methodology into two components using a Methodology that accepts a pair.`
decideMethodology :: forall b c c' d r a. Members '[Methodology b (Either c c'), Methodology c d, Methodology c' d] r => Sem (Methodology b d ': r) a -> Sem r a Source #
Decide between two Methodologys using a Methodology that computes an Either.
teeMethodologyOutput :: forall b c r a. Members '[Output c, Methodology b c] r => Sem r a -> Sem r a Source #
Tee the output of a Methodology, introducing a new Output effect to be handled.
plugMethodologyInput :: forall b c d r a. Members '[Input b, Methodology (b, c) d] r => Sem (Methodology c d ': r) a -> Sem r a Source #
Make a Methodology depend on an additional input, introducing a new Input effect to be handled.
runMethodologyAsKVStore :: forall k v r a. Members '[KVStore k v] r => Sem (Methodology k (Maybe v) ': r) a -> Sem r a Source #
Run a Methodology as a KVStore, using the input as a key and the output as the value.
runMethodologyAsKVStoreWithDefault :: forall k v r a. Members '[KVStore k v] r => v -> Sem (Methodology k v ': r) a -> Sem r a Source #
Run a Methodology as a KVStore, with a default value for lookup failure.
decomposeMethodology :: forall b f c r a. Members '[Methodology b (HList f), Methodology (HList f) c] r => Sem (Methodology b c ': r) a -> Sem r a Source #
Decompose a Methodology into several components to be recombined. This is cutMethodology specialised to HList.
decomposeMethodology3 :: forall b f g c r a. Members '[Methodology b (HList f), Methodology (HList f) (HList g), Methodology (HList g) c] r => Sem (Methodology b c ': r) a -> Sem r a Source #
Decompose a Methodology into several components over three sections with two cuts.
separateMethodologyInitial :: forall b x xs r a. Members '[Methodology b (HList xs), Methodology b x] r => Sem (Methodology b (HList (x ': xs)) ': r) a -> Sem r a Source #
Factor a Methodology decomposed over an HList in the result by a Methodology to the first variable.
endMethodologyInitial :: Sem (Methodology b (HList '[]) ': r) a -> Sem r a Source #
Finish an HList separated Methodology by consuming it for no effect.
separateMethodologyTerminal :: forall x c xs r a. (Monoid c, Members '[Methodology (HList xs) c, Methodology x c] r) => Sem (Methodology (HList (x ': xs)) c ': r) a -> Sem r a Source #
Factor a Methodology decomposed over an HList in the source by a Methodology from the first variable. Assumes the result is a Monoid.
endMethodologyTerminal :: Monoid c => Sem (Methodology (HList '[]) c ': r) a -> Sem r a Source #
Finalise an HList separated Methodology in the source by returning the Monoid unit.
fmapMethodology :: forall f b c r a. (Members '[Methodology b c] r, Traversable f) => Sem (Methodology (f b) (f c) ': r) a -> Sem r a Source #
Run a `Methodology (f b) (f c)` by way of a `Methodology b c`. Note that
f must be Traversable.
fmap2Methodology :: forall f g b c r a. (Members '[Methodology b c] r, Traversable f, Traversable g) => Sem (Methodology (f (g b)) (f (g c)) ': (Methodology (g b) (g c) ': r)) a -> Sem r a Source #
Run a `Methodology (f (g b)) (f (g c))` by way of a `Methodology b c`. Note that
f and g must be Traversable.
bindMethodology :: forall f b c r a. (Members '[Methodology b (f c)] r, Traversable f, Monad f) => Sem (Methodology (f b) (f c) ': r) a -> Sem r a Source #
Run a `Methodology (f b) (f c)` by way of a `Methodology b (f c)`. Note that
f must be both Traversable and Monad.
traverseMethodology :: forall t f b c r a. (Members '[Methodology b (f c)] r, Traversable t, Applicative f) => Sem (Methodology (t b) (f (t c)) ': r) a -> Sem r a Source #
Run a `Methodology (t b) (f (t b))` by way of a `Methodology b (f c)`. Note that
t must be Traversable and f must be Applicative.