sig
  val identifier : string
  type init
  type client_data
  type input
  type key
  type value
  type output
  val init_client : JoinMapRed.Problem.init -> JoinMapRed.Problem.client_data
  val compare_keys : JoinMapRed.Problem.key -> JoinMapRed.Problem.key -> int
  val map :
    JoinMapRed.Problem.client_data ->
    JoinMapRed.Problem.input ->
    (JoinMapRed.Problem.key * JoinMapRed.Problem.value) list
  val combine :
    JoinMapRed.Problem.value ->
    JoinMapRed.Problem.value -> JoinMapRed.Problem.value
  val reduce :
    JoinMapRed.Problem.key ->
    JoinMapRed.Problem.value ->
    JoinMapRed.Problem.output -> JoinMapRed.Problem.output
end