úÎq{      None"This extracts results from a CSP. ?Lift an IO computation into the CSP monad. CSPs are only in IO  temporarily. *Extract the current domain of a variable. /Extract the current constraints of a variable. !Is the variable currently bound? 4Compute the size of the current domain of variable. (Create a variable with the given domain <This performs a side-effect, writing to the given IORef but D records this in the nondeterministic computation so that it can be  undone when backtracking. 4The low-level function out of which constraints are 4 constructed. It modifies the domain of a variable. (Add a constraint to the given variable. Assert a unary constraint. 1Assert a binary constraint with arc consistency. >Assert an n-ary constraint with arc consistency. One day this E will allow for a heterogeneous list of variables, but at the moment $ they must all be of the same type. ,Retrieve the current binding of a variable. :Solve the given CSP. The CSP solver is a nondeterministic B function in IO and this is the generic interface which specifies = how the nondeterministic computation should be carried out. %Return a single solution to the CSP.  running with   !Return all solutions to the CSP.  running with  ! $ "#$%       "#$%&       ! "#$%&'csp-1.0Control.Monad.CSP CSPResultResultresultCSPunCSP DVContainer dvcIsBounddvcConstraints dvcABinding ConstraintDVdvDomain dvConstraintscspdomaindemonsisBound domainSizemkDVlocalWriteIORefrestrictDomain addConstraint constraint1 constraint2 constraintbindingsolveCSPoneCSPSolutionallCSPSolutionsnondeterminism-1.0Control.Monad.Amb oneValueT allValuesT $fCSPResult[]$fCSPResult(,) $fCSPResultDV $fMonadCSP