-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Python-generators notation for creation of monadic lists -- -- Generator monad transformer to create monadic lists in a manner -- similar to Python generators. @package generator @version 0.5.3 -- | A difference-list monad transformer / a monadic difference-list. -- -- Difference lists are lists with O(1) append (instead of -- O(N)). -- -- Transforming a difference list to a list is O(1), a must be -- done to access a difference list. The transformation from a list to a -- difference list is O(N). module Control.Monad.DList -- | A monadic difference-list newtype DListT m a DListT :: (ListT m a -> ListT m a) -> DListT m a runDListT :: DListT m a -> ListT m a -> ListT m a toListT :: (Monad m) => DListT m a -> ListT m a joinDListT :: (Monad m) => m (DListT m a) -> DListT m a instance MonadTrans DListT instance (Monad m) => MonadPlus (DListT m) instance (Monad m) => Applicative (DListT m) instance (Monad m) => Monad (DListT m) instance (Monad m) => Functor (DListT m) instance Monoid (DListT l a) -- | A monad transformer for the creation of Lists. Similar to Python's -- generators. -- --
-- import Control.Monad.DList (toListT)
-- import Control.Monad.Identity (Identity(..))
-- import Data.List.Class (toList)
--
-- hanoi 0 _ _ _ = mempty
-- hanoi n from to other =
-- generate $ do
-- yields $ hanoi (n-1) from other to
-- yield (from, to)
-- yields $ hanoi (n-1) other to from
--
-- > runIdentity . toList . toListT $ hanoi 3 'A' 'B' 'C' :: [(Char, Char)]
-- [('A','B'),('A','C'),('B','C'),('A','B'),('C','A'),('C','B'),('A','B')]
--
module Control.Monad.Generator
-- | A monad transformer to create Lists. generate transforms a
-- GeneratorT v m a to a DListT m a.
data GeneratorT v m a
-- | O(1), Transform a GeneratorT to a DListT
generate :: (Monad m) => GeneratorT v m () -> DListT m v
-- | O(1), Output a result value
yield :: (Monad m) => v -> GeneratorT v m ()
-- | O(1), Output all the values of a DListT.
yields :: (Monad m) => DListT m v -> GeneratorT v m ()
instance (MonadIO m) => MonadIO (GeneratorT v m)
instance MonadTrans (GeneratorT v)
instance (Monad m) => Applicative (GeneratorT v m)
instance (Monad m) => Monad (GeneratorT v m)
instance (Monad m) => Functor (GeneratorT v m)