The nondeterminism package

[Tags: lgpl, library]

Nondeterministic computations

[Skip to ReadMe]


Versions1.0, 1.2, 1.4
Change logNone available
Dependenciesbase (>=3 && <5), containers, mtl (>=2) [details]
AuthorAndrei Barbu <>
MaintainerAndrei Barbu <>
CategoryControl, AI, Constraints, Failure, Monads
Source repositoryhead: git clone
UploadedMon Oct 19 18:20:24 UTC 2015 by AndreiBarbu
Downloads405 total (14 in last 30 days)
1 []
StatusDocs available [build log]
Last success reported on 2015-10-19 [all 1 reports]




Maintainers' corner

For package maintainers and hackage trustees

Readme for nondeterminism-1.4


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.


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.