packages feed

nondeterminism-1.2: README.md

# Nondeterminism

This package is available via [Hackage where its documentation resides](https://hackage.haskell.org/package/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.

```haskell
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