# Nondeterminism

This package is available via Hackage where its documentation resides.

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) empty
return (a,b,c)
length $ allValues $ pyTriple 100
```

More examples can be found in `tests/test.hs`

.

## Future

- allValues is not lazy in its return value