functor (Job : Job->
  sig
    val map_reduce :
      MapReduce.Job.input list ->
      (MapReduce.Job.key * MapReduce.Job.output) list Async.Std.Deferred.t
  end