-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Non-Determinism Monad for Level-Wise Search
--
-- This Haskell library provides an implementation of the MonadPlus type
-- class that enumerates the levels of the search space and allows to
-- implement breadth-first search.
@package level-monad
@version 0.2
-- | This library provides an implementation of the MonadPlus type class
-- that enumerates the levels of the search space and allows to implement
-- breadth-first search.
--
-- The implementation is inspired by Mike Spivey and Silvija Seres: cf.
-- Chapter 9 of the book 'The Fun of Programming'.
--
-- Warning: Levels is only a monad when the results of the
-- enumeration functions are interpreted as a multiset, i.e., a valid
-- transformation according to the monad laws may change the order of the
-- results.
module Control.Monad.Levels
-- | Non-Deterministic computations of type Levels a can be
-- searched level-wise.
data Levels a
-- | The function levels yields the results of a non-deterministic
-- computation grouped in levels.
levels :: Levels a -> [[a]]
-- | The function breadthFirstSearch enumerates the results of a
-- non-deterministic computation in breadth-first order.
breadthFirstSearch :: Levels a -> [a]
-- | The function levelDiagonalisation enumerates the results of a
-- non-deterministic computation by diagonally interleaving the results
-- of all levels.
levelDiagonalisation :: Levels a -> [a]
instance MonadPlus Levels
instance Monad Levels