Safe Haskell | Safe |
---|---|
Language | Haskell2010 |
Another implementation of nondeterministic choice effect
Synopsis
- data NdetEff a
- withNdetEff :: Alternative f => Monad m => a -> m (f a)
- left :: (Bool -> k) -> k
- right :: (Bool -> k) -> k
- makeChoiceA :: Alternative f => Eff (NdetEff ': r) a -> Eff r (f a)
- makeChoiceA0 :: Alternative f => Eff (NdetEff ': r) a -> Eff r (f a)
- makeChoiceLst :: Eff (NdetEff ': r) a -> Eff r [a]
- msplit1 :: Member NdetEff r => Eff r a -> Eff r (Maybe (a, Eff r a))
- module Control.Eff.Logic
Documentation
A different implementation, more directly mapping to MonadPlus interface
Instances
(MonadBase m m, LiftedBase m r) => MonadBaseControl m (Eff (NdetEff ': r)) Source # | |
(Alternative f, Monad m) => Handle NdetEff (m (f a)) Source # | Given a callback and NdetEff requests respond to them |
Defined in Control.Eff.NdetEff | |
type StM (Eff (NdetEff ': r)) a Source # | |
withNdetEff :: Alternative f => Monad m => a -> m (f a) Source #
How to embed a pure value in non-deterministic context
makeChoiceA :: Alternative f => Eff (NdetEff ': r) a -> Eff r (f a) Source #
A different implementation, more involved but faster and taking much less (100 times) less memory. The benefit of the effect framework is that we can have many interpreters.
makeChoiceA0 :: Alternative f => Eff (NdetEff ': r) a -> Eff r (f a) Source #
An interpreter The following is very simple, but leaks a lot of memory The cause probably is mapping every failure to empty It takes then a lot of timne and space to store those empty
makeChoiceLst :: Eff (NdetEff ': r) a -> Eff r [a] Source #
Same as makeChoiceA, except it has the type hardcoded. Required for MonadBaseControl instance.
msplit1 :: Member NdetEff r => Eff r a -> Eff r (Maybe (a, Eff r a)) Source #
A different implementation, more involved. Unclear whether this is faster or not.
module Control.Eff.Logic
Orphan instances
Member NdetEff r => Alternative (Eff r) Source # | |
Member NdetEff r => MonadPlus (Eff r) Source # | |
Member NdetEff r => MSplit (Eff r) Source # | We actually implement LogicT, the non-determinism reflection, of
which soft-cut is one instance. Straightforward implementation
using |