level-monad-0.2.2.0: Non-Determinism Monad for Level-Wise Search

Portabilityportable
Stabilityexperimental
MaintainerSebastian Fischer (sebf@informatik.uni-kiel.de)

Control.Monad.Levels

Description

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.

Synopsis

Documentation

data Levels a Source

Non-Deterministic computations of type Levels a can be searched level-wise.

levels :: Levels a -> [[a]]Source

The function levels yields the results of a non-deterministic computation grouped in levels.

breadthFirstSearch :: Levels a -> [a]Source

The function breadthFirstSearch enumerates the results of a non-deterministic computation in breadth-first order.

levelDiagonalisation :: Levels a -> [a]Source

The function levelDiagonalisation enumerates the results of a non-deterministic computation by diagonally interleaving the results of all levels.