`Choice.S`

The unary choice monad interface

`val accept : 'a -> 'a t`

`accept x`

accepts `x`

as a result of computation. (Same as `pure x`

.

`val reject : unit -> 'a t`

`reject ()`

rejects the rest of computation sequence, and terminate the computation with the `zero`

result (Same as `zero ()`

`val guard : bool -> unit t`

`guard cond`

ensures `cond`

is `true`

in the rest of computation. Otherwise the rest of the computation is rejected.