sig
  exception No_value of string
  val value : 'a option -> default:'-> 'a
  val value_exn : 'a option -> msg:string -> 'a
  val map : 'a option -> f:('-> 'b) -> 'b option
  val value_map : 'a option -> default:'-> f:('-> 'b) -> 'b
  val return : '-> 'a option
  val bind : 'a option -> f:('-> 'b option) -> 'b option
  val ( >>= ) : 'a option -> ('-> 'b option) -> 'b option
end