util-logict-0.0.0.0: src/Util/Monad/Logic/Class.hs
module Util.Monad.Logic.Class where
import Control.Applicative
import Control.Monad (MonadPlus, guard)
import Control.Monad.Logic.Class
infixr 7 \/
(\/) :: MonadLogic m => m a -> m a -> m a
(\/) = interleave
infixr 8 ><
(><) :: MonadLogic m => m a -> m b -> m (a, b)
(><) = liftL2 (,)
infixl 4 <~>
(<~>) :: MonadLogic m => m (a -> b) -> m a -> m b
fs <~> as = fs >>- (<$> as)
liftL2 :: MonadLogic m => (a -> b -> c) -> m a -> m b -> m c
liftL2 f as bs = f <$> as <~> bs
liftL3 :: MonadLogic m => (a -> b -> c -> d) -> m a -> m b -> m c -> m d
liftL3 f as bs cs = f <$> as <~> bs <~> cs