functor (A : S) (B : S->
  sig
    type elt_a = A.elt
    type elt_b = B.elt
    type 'a map_a = 'A.Map.t
    type 'a map_b = 'B.Map.t
    type set_a
    type set_b
    val proj_map :
      (elt_a -> elt_b) -> '-> ('-> '-> 'b) -> 'a map_a -> 'b map_b
    val proj_map_monadic :
      'parameters ->
      'method_handler ->
      (elt_a -> elt_b) ->
      '->
      ('parameters -> 'method_handler -> '-> '-> 'method_handler * 'b) ->
      'a map_a -> 'method_handler * 'b map_b
    val proj_set : (elt_a -> elt_b) -> set_a -> set_b
    val proj_set_monadic :
      'parameters ->
      'method_handler ->
      ('parameters -> 'method_handler -> elt_a -> 'method_handler * elt_b) ->
      set_a -> 'method_handler * set_b
    val partition_set : (elt_a -> elt_b) -> set_a -> set_a map_b
    val partition_set_monadic :
      'parameters ->
      'method_handler ->
      ('parameters -> 'method_handler -> elt_a -> 'method_handler * elt_b) ->
      set_a -> 'method_handler * set_a map_b
  end