mirror of
https://github.com/lexi-lambda/freer-simple.git
synced 2024-12-27 16:16:53 +03:00
86a8212cd8
The Members type family (closed) takes two type-level lists, m and r, as parameters. m contains the effect labels which should be members of r. The resulting type is a constraint requiring that all elements of m be members of r. This simplifies constraints that require multiple members of the same effect list. For example. ioState :: (Member IO r, Member (State Int) r) => Eff r () becomes ioState :: Members '[IO, State Int] r => Eff r () Furthermore, it allows apps to easily define their typical effect constraints alongside the typical runtime effect. type AppEffs = '[State Int, Writer String, IO] type AppConstraint r = Members AppEffs r type RunApp = Eff AppEffs |
||
---|---|---|
.. | ||
Common.hs | ||
Exception.hs | ||
Fresh.hs | ||
NonDetEff.hs | ||
Reader.hs | ||
State.hs | ||
StateRW.hs |