Readme for nondeterminism-1.0
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!