-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A backtracking logic-programming monad with asymptotic improvements to msplit -- -- Adapted from the paper http://okmij.org/ftp/Haskell/zseq.pdf by -- Atze van der Ploeg and Oleg Kiselyov @package logict-sequence @version 0.1.0.0 module Control.Monad.Logic.Sequence newtype SeqT m a SeqT :: Queue (m (Maybe (a, SeqT m a))) -> SeqT m a type Seq a = SeqT Identity a -- | Based on the LogicT improvements in the paper, Reflection without -- Remorse. Code is based on the code provided in: -- https://github.com/atzeus/reflectionwithoutremorse -- -- Note: that code is provided under an MIT license, so we use that as -- well. type Queue = MSeq FastTCQueue newtype MSeq s a MSeq :: s (AsUnitLoop a) () () -> MSeq s a [getMS] :: MSeq s a -> s (AsUnitLoop a) () () data AsUnitLoop a b c [UL] :: !a -> AsUnitLoop a () () observeAllT :: Monad m => SeqT m a -> m [a] observeAll :: Seq a -> [a] observeT :: MonadFail m => SeqT m a -> m a observe :: Seq a -> a observeMaybeT :: Monad m => SeqT m (Maybe a) -> m (Maybe a) observeMaybe :: Seq (Maybe a) -> Maybe a -- | The class of monad transformers. Instances should satisfy the -- following laws, which state that lift is a monad -- transformation: -- -- class MonadTrans (t :: Type -> Type -> Type -> Type) -- | Lift a computation from the argument monad to the constructed monad. lift :: (MonadTrans t, Monad m) => m a -> t m a instance GHC.Base.Monad m => GHC.Base.Functor (Control.Monad.Logic.Sequence.SeqT m) instance GHC.Base.Monad m => GHC.Base.Applicative (Control.Monad.Logic.Sequence.SeqT m) instance GHC.Base.Monad m => GHC.Base.Alternative (Control.Monad.Logic.Sequence.SeqT m) instance GHC.Base.Monad m => GHC.Base.Monad (Control.Monad.Logic.Sequence.SeqT m) instance GHC.Base.Monad m => Control.Monad.Fail.MonadFail (Control.Monad.Logic.Sequence.SeqT m) instance GHC.Base.Monad m => GHC.Base.MonadPlus (Control.Monad.Logic.Sequence.SeqT m) instance GHC.Base.Monad m => GHC.Base.Semigroup (Control.Monad.Logic.Sequence.SeqT m a) instance GHC.Base.Monad m => GHC.Base.Monoid (Control.Monad.Logic.Sequence.SeqT m a) instance Control.Monad.Trans.Class.MonadTrans Control.Monad.Logic.Sequence.SeqT instance GHC.Base.Monad m => Control.Monad.Logic.Class.MonadLogic (Control.Monad.Logic.Sequence.SeqT m) instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Control.Monad.Logic.Sequence.SeqT m) instance Data.TASequence.TASequence s => Data.SequenceClass.Sequence (Control.Monad.Logic.Sequence.MSeq s) instance Data.TASequence.TASequence s => GHC.Base.Functor (Control.Monad.Logic.Sequence.MSeq s) instance Data.TASequence.TASequence s => Data.Foldable.Foldable (Control.Monad.Logic.Sequence.MSeq s) instance Data.TASequence.TASequence s => Data.Traversable.Traversable (Control.Monad.Logic.Sequence.MSeq s)