functor (C : COLLECTION->
  sig
    type 'a t = 'C.t
    type ('a, 'b) op
    val apply : ('a, 'b) op -> 'a t -> 'b t
    val apply_fold : ('a, 'b) op -> ('-> '-> 'c) -> '-> 'a t -> 'c
    val apply' : 'a t -> ('a, 'b) op -> 'b t
    val id : ('a, 'a) op
    val map : ('-> 'b) -> ('a, 'b) op
    val filter : ('-> bool) -> ('a, 'a) op
    val filter_map : ('-> 'b option) -> ('a, 'b) op
    val flat_map : ('-> 'b t) -> ('a, 'b) op
    val extern : ('a t -> 'b t) -> ('a, 'b) op
    val compose : ('b, 'c) op -> ('a, 'b) op -> ('a, 'c) op
    val ( >>> ) : ('a, 'b) op -> ('b, 'c) op -> ('a, 'c) op
  end