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