This library provides an implementation of sets for which only the following operations are available:
data NDSet
instance Functor NDSet
instance Monad NDSet
union :: NDSet a -> NDSet a -> NDSet a
choose :: NDSet a -> IO a
unsafePromiseSingleton :: NDSet a -> a
The name stands for "Non-Deterministic Sets", because they have the
property that the only way to view the contents of the set is to
choose an element using choose
. The actual element chosen is
undefined (the IO
monad provides the nondeterminism). NDSets are
always non-empty, so choose
always succeeds.
NDSets are used by the Exception library (Section Exception).