functor (Model : OUTPUT_MODEL->   sig     type ('a, 'b, 'c) thread = ('a, 'b, 'c) Model.thread     type ('a, 'b, 'c) channel = ('a, 'b, 'c) Model.channel     val return : '-> ('a, 'b, 'c) Sosa.OUTPUT_MODEL.thread     val bind :       ('a, 'b, 'c) Sosa.OUTPUT_MODEL.thread ->       ('-> ('d, 'b, 'c) Sosa.OUTPUT_MODEL.thread) ->       ('d, 'b, 'c) Sosa.OUTPUT_MODEL.thread     val output :       ('a, 'b, 'c) Sosa.OUTPUT_MODEL.channel ->       String.t -> (unit, 'e, 'f) Sosa.OUTPUT_MODEL.thread   end