packages feed

nondeterminism-1.0: README.md

# Nondeterminism

This provides nondeterministic computations in Haskell. It implements
an `Amb` monad in which you can perform nondeterministic choices along
with a monad transformer version, `AmbT`.

## Amb

An example which finds Pythagorean triplets up to a certain size, project Euler problem 9.

    import Control.Monad
    import Control.Monad.Amb
    pyTriple :: (Num t, Ord t) => t -> Amb r (t, t, t)
    pyTriple n = do a <- anIntegerBetween 1 n
                    b <- anIntegerBetween (a + 1) n
                    c <- anIntegerBetween (b + 1) n
                    when (a*a + b*b /= c*c) fail'
                    return (a,b,c)

    length $ allValues $ pyTriple 10000

## Future

 - Docs!