úÎGÉ+      !"#$%&'()*NoneFT{!This extracts results from a CSP.LLift 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?3Compute 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 records this in the nondeterministic computation so that it can be undone when backtracking.gThe low-level function out of which constraints are constructed. It modifies the domain of a variable.'Add a constraint to the given variable.Assert a unary constraint.0Assert a binary constraint with arc consistency.1Assert a trinary constraint with arc consistency.¦Assert an n-ary constraint with arc consistency. One day this 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 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.4.0-9hECnAqRd5MQ9Ve7zfE6zControl.Monad.CSP CSPResultResultresultCSPunCSP DVContainer dvcIsBounddvcConstraints dvcABinding ConstraintDVdvDomain dvConstraintscspdomaindemonsisBound domainSizemkDVlocalWriteIORefrestrictDomain addConstraint constraint1 constraint2 constraint3 constraintbindingsolveCSPoneCSPSolutionallCSPSolutions $fMonadCSP$fApplicativeCSP $fFunctorCSP $fCSPResult[]$fCSPResult(,,,,,)$fCSPResult(,,,,)$fCSPResult(,,,)$fCSPResult(,,)$fCSPResult(,) $fCSPResultDV)nondeterminism-1.4-IcM5FP9ZAWG4st5duYjPLwControl.Monad.Amb oneValueT allValuesT