sig   type 'a t   type 'a choice = 'Choice.t   val return : '-> 'Choice.t   val of_list : 'a list -> 'Choice.t   val from_fun : (unit -> 'a option) -> 'Choice.t   val delay : (unit -> 'Choice.t) -> 'Choice.t   val fail : 'Choice.t   val cons : '-> 'Choice.t -> 'Choice.t   val mplus : 'Choice.t -> 'Choice.t -> 'Choice.t   val bind : ('-> 'Choice.t) -> 'Choice.t -> 'Choice.t   val interleave : 'Choice.t -> 'Choice.t -> 'Choice.t   val fair_bind : ('-> 'Choice.t) -> 'Choice.t -> 'Choice.t   val ite : 'Choice.t -> ('-> 'Choice.t) -> 'Choice.t -> 'Choice.t   val map : ('-> 'b) -> 'Choice.t -> 'Choice.t   val product : 'Choice.t -> 'Choice.t -> ('a * 'b) Choice.t   val fmap : ('-> 'b option) -> 'Choice.t -> 'Choice.t   val filter : ('-> bool) -> 'Choice.t -> 'Choice.t   val once : 'Choice.t -> 'Choice.t   val take : int -> 'Choice.t -> 'Choice.t   val run_one : 'Choice.t -> 'a option   val run_n : int -> 'Choice.t -> 'a list   val run_all : 'Choice.t -> 'a list   val to_list : 'Choice.t -> 'a list   val iter : 'Choice.t -> ('-> bool) -> unit   val fold : ('-> '-> 'a) -> '-> 'Choice.t -> 'a   val count : 'Choice.t -> int   val is_empty : 'Choice.t -> bool   val forall : bool Choice.t -> bool   val exists : bool Choice.t -> bool   val lift : ('-> 'b) -> 'Choice.t -> 'Choice.t   val lift2 : ('-> '-> 'c) -> 'Choice.t -> 'Choice.t -> 'Choice.t   val liftFair : ('-> 'b) -> 'Choice.t -> 'Choice.t   val liftFair2 :     ('-> '-> 'c) -> 'Choice.t -> 'Choice.t -> 'Choice.t   val pure : ('-> 'b) -> ('-> 'b) Choice.t   val app : ('-> 'b) Choice.t -> 'Choice.t -> 'Choice.t   val ( $$ ) : ('-> 'b) Choice.t -> 'Choice.t -> 'Choice.t   val ( >>= ) : 'Choice.t -> ('-> 'Choice.t) -> 'Choice.t   val ( >>- ) : 'Choice.t -> ('-> 'Choice.t) -> 'Choice.t   val ( ++ ) : 'Choice.t -> 'Choice.t -> 'Choice.t   val ( <|> ) : 'Choice.t -> 'Choice.t -> 'Choice.t   module Enum :     sig       type 'a t       type 'a item = End | Item of 'a * 'Choice.Enum.t       val next : 'Choice.Enum.t -> 'Choice.Enum.item Choice.choice       val empty : 'Choice.Enum.t       val cons : 'Choice.choice -> 'Choice.Enum.t -> 'Choice.Enum.t       val cons1 : '-> 'Choice.Enum.t -> 'Choice.Enum.t       val of_list : 'a list -> 'Choice.Enum.t       val zip :         'Choice.Enum.t -> 'Choice.Enum.t -> ('a * 'b) Choice.Enum.t       val count : 'Choice.Enum.t -> int       val to_lists : 'Choice.Enum.t -> 'a list Choice.choice       val to_list_list : 'Choice.Enum.t -> 'a list list     end   module List :     sig       val suffixes : 'a list -> 'a list Choice.t       val permutations : 'a list -> 'Choice.Enum.t       val combinations : int -> 'a list -> 'Choice.Enum.t     end   module Array :     sig       val permutations : 'a array -> 'Choice.Enum.t       val combinations : int -> 'a array -> 'Choice.Enum.t     end end