sig
  type 'a state = Done of '| Waiting | Failed of exn
  module type PARAM = sig val min_size : int val max_size : int end
  exception Stopped
  module Make :
    functor (P : PARAM->
      sig
        val run : (unit -> 'a) -> unit
        val run1 : ('-> 'b) -> '-> unit
        val run2 : ('-> '-> 'c) -> '-> '-> unit
        val run3 : ('-> '-> '-> 'd) -> '-> '-> '-> unit
        val set_exn_handler : (exn -> unit) -> unit
        val active : unit -> bool
        val stop : unit -> unit
        module Fut :
          sig
            type 'a t
            type 'a future = 'CCPool.Make.Fut.t
            val return : '-> 'CCPool.Make.Fut.t
            val fail : exn -> 'CCPool.Make.Fut.t
            val make : (unit -> 'a) -> 'CCPool.Make.Fut.t
            val make1 : ('-> 'b) -> '-> 'CCPool.Make.Fut.t
            val make2 : ('-> '-> 'c) -> '-> '-> 'CCPool.Make.Fut.t
            val get : 'CCPool.Make.Fut.t -> 'a
            val state : 'CCPool.Make.Fut.t -> 'CCPool.state
            val is_done : 'CCPool.Make.Fut.t -> bool
            val on_success : 'CCPool.Make.Fut.t -> ('-> unit) -> unit
            val on_failure : 'CCPool.Make.Fut.t -> (exn -> unit) -> unit
            val on_finish :
              'CCPool.Make.Fut.t -> ('CCPool.state -> unit) -> unit
            val flat_map :
              ('-> 'CCPool.Make.Fut.t) ->
              'CCPool.Make.Fut.t -> 'CCPool.Make.Fut.t
            val and_then :
              'CCPool.Make.Fut.t ->
              (unit -> 'CCPool.Make.Fut.t) -> 'CCPool.Make.Fut.t
            val sequence_a :
              'CCPool.Make.Fut.t array -> 'a array CCPool.Make.Fut.t
            val map_a :
              ('-> 'CCPool.Make.Fut.t) ->
              'a array -> 'b array CCPool.Make.Fut.t
            val sequence_l :
              'CCPool.Make.Fut.t list -> 'a list CCPool.Make.Fut.t
            val map_l :
              ('-> 'CCPool.Make.Fut.t) ->
              'a list -> 'b list CCPool.Make.Fut.t
            val choose_a : 'CCPool.Make.Fut.t array -> 'CCPool.Make.Fut.t
            val choose_l : 'CCPool.Make.Fut.t list -> 'CCPool.Make.Fut.t
            val map :
              ('-> 'b) -> 'CCPool.Make.Fut.t -> 'CCPool.Make.Fut.t
            val map_async :
              ('-> 'b) -> 'CCPool.Make.Fut.t -> 'CCPool.Make.Fut.t
            val app :
              ('-> 'b) CCPool.Make.Fut.t ->
              'CCPool.Make.Fut.t -> 'CCPool.Make.Fut.t
            val app_async :
              ('-> 'b) CCPool.Make.Fut.t ->
              'CCPool.Make.Fut.t -> 'CCPool.Make.Fut.t
            val sleep : float -> unit CCPool.Make.Fut.t
            module Infix :
              sig
                val ( >>= ) :
                  'CCPool.Make.Fut.t ->
                  ('-> 'CCPool.Make.Fut.t) -> 'CCPool.Make.Fut.t
                val ( >> ) :
                  'CCPool.Make.Fut.t ->
                  (unit -> 'CCPool.Make.Fut.t) -> 'CCPool.Make.Fut.t
                val ( >|= ) :
                  'CCPool.Make.Fut.t -> ('-> 'b) -> 'CCPool.Make.Fut.t
                val ( <*> ) :
                  ('-> 'b) CCPool.Make.Fut.t ->
                  'CCPool.Make.Fut.t -> 'CCPool.Make.Fut.t
              end
            val ( >>= ) :
              'CCPool.Make.Fut.t ->
              ('-> 'CCPool.Make.Fut.t) -> 'CCPool.Make.Fut.t
            val ( >> ) :
              'CCPool.Make.Fut.t ->
              (unit -> 'CCPool.Make.Fut.t) -> 'CCPool.Make.Fut.t
            val ( >|= ) :
              'CCPool.Make.Fut.t -> ('-> 'b) -> 'CCPool.Make.Fut.t
            val ( <*> ) :
              ('-> 'b) CCPool.Make.Fut.t ->
              'CCPool.Make.Fut.t -> 'CCPool.Make.Fut.t
          end
      end
end