grisette-0.5.0.0: Symbolic evaluation as a library
Copyright(c) Sirui Lu 2021-2024
LicenseBSD-3-Clause (see the LICENSE file)
Maintainersiruilu@cs.washington.edu
StabilityExperimental
PortabilityGHC only
Safe HaskellTrustworthy
LanguageHaskell2010

Grisette.Lib.Control.Monad

Description

 
Synopsis

Functor and Monad classes

mrgFmap :: (TryMerge f, Mergeable a, Mergeable b, Functor f) => (a -> b) -> f a -> f b Source #

fmap with MergingStrategy knowledge propagation.

(.<$) :: (TryMerge f, Mergeable a, Mergeable b, Functor f) => b -> f a -> f b infixl 4 Source #

<$ with MergingStrategy knowledge propagation.

mrgReturnWithStrategy :: MonadTryMerge u => MergingStrategy a -> a -> u a Source #

return with MergingStrategy knowledge propagation.

mrgBindWithStrategy :: MonadTryMerge u => MergingStrategy a -> MergingStrategy b -> u a -> (a -> u b) -> u b Source #

>>= with MergingStrategy knowledge propagation.

mrgReturn :: (MonadTryMerge u, Mergeable a) => a -> u a Source #

return with MergingStrategy knowledge propagation.

(.>>=) :: (MonadTryMerge u, Mergeable a, Mergeable b) => u a -> (a -> u b) -> u b infixl 1 Source #

>>= with MergingStrategy knowledge propagation.

(.>>) :: (MonadTryMerge m, Mergeable a, Mergeable b) => m a -> m b -> m b infixl 1 Source #

>> with MergingStrategy knowledge propagation.

This is usually more efficient than calling the original >> and merge the results.

mrgFail :: (MonadTryMerge m, Mergeable a, MonadFail m) => String -> m a Source #

fail with MergingStrategy knowledge propagation.

mrgMzero :: forall m a. (MonadTryMerge m, Mergeable a, MonadPlus m) => m a Source #

mzero with MergingStrategy knowledge propagation.

mrgMplus :: forall m a. (MonadTryMerge m, Mergeable a, MonadPlus m) => m a -> m a -> m a Source #

mplus with MergingStrategy knowledge propagation.

Functions

Basic Monad functions

mrgMapM :: forall a b t f. (Mergeable b, Mergeable1 t, MonadTryMerge f, Traversable t) => (a -> f b) -> t a -> f (t b) Source #

mapM with MergingStrategy knowledge propagation.

mrgMapM_ :: (MonadTryMerge m, Foldable t) => (a -> m b) -> t a -> m () Source #

mapM_ with MergingStrategy knowledge propagation.

mrgForM :: (Mergeable b, Mergeable1 t, Traversable t, MonadTryMerge m) => t a -> (a -> m b) -> m (t b) Source #

forM with MergingStrategy knowledge propagation.

mrgForM_ :: (MonadTryMerge m, Foldable t) => t a -> (a -> m b) -> m () Source #

forM_ with MergingStrategy knowledge propagation.

mrgSequence :: forall a t f. (Mergeable a, Mergeable1 t, MonadTryMerge f, Traversable t) => t (f a) -> f (t a) Source #

sequence with MergingStrategy knowledge propagation.

mrgSequence_ :: (Foldable t, MonadTryMerge m) => t (m a) -> m () Source #

sequence_ with MergingStrategy knowledge propagation.

(.=<<) :: (MonadTryMerge m, Mergeable a, Mergeable b) => (a -> m b) -> m a -> m b infixr 1 Source #

=<< with MergingStrategy knowledge propagation.

(.>=>) :: (MonadTryMerge m, Mergeable a, Mergeable b, Mergeable c) => (a -> m b) -> (b -> m c) -> a -> m c infixr 1 Source #

>=> with MergingStrategy knowledge propagation.

(.<=<) :: (MonadTryMerge m, Mergeable a, Mergeable b, Mergeable c) => (b -> m c) -> (a -> m b) -> a -> m c infixr 1 Source #

<=< with MergingStrategy knowledge propagation.

mrgForever :: (Applicative m, TryMerge m, Mergeable b, Mergeable a) => m a -> m b Source #

forever with MergingStrategy knowledge propagation.

mrgVoid :: (TryMerge f, Functor f) => f a -> f () Source #

void with MergingStrategy knowledge propagation.

Generalisations of list functions

mrgJoin :: (MonadTryMerge m, Mergeable a) => m (m a) -> m a Source #

join with MergingStrategy knowledge propagation.

mrgMsum :: (MonadTryMerge m, Mergeable a, MonadPlus m, Foldable t) => t (m a) -> m a Source #

msum with MergingStrategy knowledge propagation.

mrgMfilter :: (MonadTryMerge m, MonadPlus m, Mergeable a) => (a -> Bool) -> m a -> m a Source #

mfilter with MergingStrategy knowledge propagation.

symMfilter :: (MonadTryMerge m, MonadPlus m, MonadUnion m, Mergeable a) => (a -> SymBool) -> m a -> m a Source #

mfilter with MergingStrategy knowledge propagation and symbolic conditions.

mrgFilterM :: (TryMerge m, Applicative m, Mergeable a, Foldable t) => (a -> m Bool) -> t a -> m [a] Source #

filterM with MergingStrategy knowledge propagation.

symFilterM :: (TryMerge m, MonadUnion m, Mergeable a, Foldable t) => (a -> m SymBool) -> t a -> m [a] Source #

filterM with MergingStrategy knowledge propagation and symbolic conditions.

mrgMapAndUnzipM :: (Applicative m, TryMerge m, Mergeable b, Mergeable c) => (a -> m (b, c)) -> [a] -> m ([b], [c]) Source #

mapAndUnzipM with MergingStrategy knowledge propagation.

mrgZipWithM :: (Applicative m, TryMerge m, Mergeable c) => (a -> b -> m c) -> [a] -> [b] -> m [c] Source #

zipWithM with MergingStrategy knowledge propagation.

mrgZipWithM_ :: (Applicative m, TryMerge m, Mergeable c) => (a -> b -> m c) -> [a] -> [b] -> m () Source #

zipWithM_ with MergingStrategy knowledge propagation.

mrgFoldM :: (MonadTryMerge m, Mergeable b, Foldable t) => (b -> a -> m b) -> b -> t a -> m b Source #

foldM with MergingStrategy knowledge propagation.

mrgFoldM_ :: (MonadTryMerge m, Foldable t, Mergeable b) => (b -> a -> m b) -> b -> t a -> m () Source #

foldM_ with MergingStrategy knowledge propagation.

mrgReplicateM :: (Applicative m, TryMerge m, Mergeable a) => Int -> m a -> m [a] Source #

replicateM with MergingStrategy knowledge propagation.

symReplicateM :: (MonadUnion m, TryMerge m, Mergeable a, Num int, SOrd int) => Int -> int -> m a -> m [a] Source #

replicateM with MergingStrategy knowledge propagation and symbolic number of elements.

mrgReplicateM_ :: (Applicative m, TryMerge m, Mergeable a) => Int -> m a -> m () Source #

replicateM_ with MergingStrategy knowledge propagation.

symReplicateM_ :: (MonadUnion m, TryMerge m, Mergeable a, Num int, SOrd int) => Int -> int -> m a -> m () Source #

replicateM_ with MergingStrategy knowledge propagation and symbolic number of elements.

Conditional execution of monadic expressions

mrgGuard :: (Alternative m, TryMerge m) => Bool -> m () Source #

guard with MergingStrategy knowledge propagation.

symGuard :: (UnionMergeable1 m, TryMerge m, Alternative m) => SymBool -> m () Source #

guard with MergingStrategy knowledge propagation and symbolic conditions.

mrgWhen :: (Applicative m, TryMerge m) => Bool -> m () -> m () Source #

when with MergingStrategy knowledge propagation.

symWhen :: (Applicative m, TryMerge m, UnionMergeable1 m) => SymBool -> m () -> m () Source #

when with MergingStrategy knowledge propagation and symbolic conditions.

mrgUnless :: (Applicative m, TryMerge m) => Bool -> m () -> m () Source #

unless with MergingStrategy knowledge propagation.

symUnless :: (Applicative m, TryMerge m, UnionMergeable1 m) => SymBool -> m () -> m () Source #

unless with MergingStrategy knowledge propagation and symbolic conditions.

Monadic lifting operators

mrgLiftM :: (MonadTryMerge m, Mergeable a, Mergeable b) => (a -> b) -> m a -> m b Source #

liftM with MergingStrategy knowledge propagation.

mrgLiftM2 :: (MonadTryMerge m, Mergeable a, Mergeable b, Mergeable c) => (a -> b -> c) -> m a -> m b -> m c Source #

liftM2 with MergingStrategy knowledge propagation.

mrgLiftM3 :: (MonadTryMerge m, Mergeable a, Mergeable b, Mergeable c, Mergeable d) => (a -> b -> c -> d) -> m a -> m b -> m c -> m d Source #

liftM3 with MergingStrategy knowledge propagation.

mrgLiftM4 :: (MonadTryMerge m, Mergeable a, Mergeable b, Mergeable c, Mergeable d, Mergeable e) => (a -> b -> c -> d -> e) -> m a -> m b -> m c -> m d -> m e Source #

liftM4 with MergingStrategy knowledge propagation.

mrgLiftM5 :: (MonadTryMerge m, Mergeable a, Mergeable b, Mergeable c, Mergeable d, Mergeable e, Mergeable f) => (a -> b -> c -> d -> e -> f) -> m a -> m b -> m c -> m d -> m e -> m f Source #

liftM5 with MergingStrategy knowledge propagation.

mrgAp :: (MonadTryMerge m, Mergeable a, Mergeable b) => m (a -> b) -> m a -> m b Source #

<*> with MergingStrategy knowledge propagation.

Strict monadic functions

(.<$!>) :: (MonadTryMerge m, Mergeable a, Mergeable b) => (a -> b) -> m a -> m b infixl 4 Source #

<$!> with MergingStrategy knowledge propagation. Merging is always strict so we can directly use .<$>.