-- 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 using -- breadth-first search or iterativ deepening depth-first search. @package level-monad @version 0.4 -- | 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'. The implementation of -- iterative deepening depth-first is, however, significantly simpler -- thanks to the use of a continuation monad. -- -- 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 -- | The function bfs enumerates the results of a -- non-deterministic computation in breadth-first order. bfs :: FMList a -> [a] -- | The function idfs computes the levels of a depth bound -- computation using iterative deepening depth-first search. Unlike -- breadth-first search it runs in constant space but usually takes a bit -- longer, depending on how the depth limit is increased. Don't use this -- algorithm if you know that there is only a finite number of results -- because it will continue trying larger depth limits without -- recognizing that there are no more solutions. idfs :: FMList a -> [a] -- | The function idfsBy computes the levels of a depth bound -- computation using iterative deepening depth-first search incrementing -- the depth limit between searches using the given number of steps. idfsBy :: Int -> FMList a -> [a] instance Monoid (DepthBound a) instance Monoid (Levels a)