sig
  type 'a t = 'a option
  val may : ('-> unit) -> 'a option -> unit
  val map : ('-> 'b) -> 'a option -> 'b option
  val bind : ('-> 'b option) -> 'a option -> 'b option
  val apply : ('-> 'a) option -> '-> 'a
  val default : '-> 'a option -> 'a
  val ( |? ) : 'a option -> '-> 'a
  val map_default : ('-> 'b) -> '-> 'a option -> 'b
  val is_none : 'a option -> bool
  val is_some : 'a option -> bool
  val get : 'a option -> 'a
  val get_exn : 'a option -> exn -> 'a
  val compare : ?cmp:('-> '-> int) -> 'a option -> 'a option -> int
  val eq : ?eq:('-> '-> bool) -> 'a option -> 'a option -> bool
  val enum : 'a option -> 'BatEnum.t
  val of_enum : 'BatEnum.t -> 'a option
  module Monad :
    sig
      type 'a m = 'a option
      val return : '-> 'a m
      val bind : 'a m -> ('-> 'b m) -> 'b m
    end
  val print :
    ('BatInnerIO.output -> '-> unit) ->
    'BatInnerIO.output -> 'b t -> unit
  val t_printer : 'BatValuePrinter.t -> 'a t BatValuePrinter.t
  val maybe_printer : 'BatValuePrinter.t -> 'a t BatValuePrinter.t
  module Labels :
    sig
      val may : f:('-> unit) -> 'a option -> unit
      val map : f:('-> 'b) -> 'a option -> 'b option
      val map_default : f:('-> 'b) -> '-> 'a option -> 'b
    end
  module Infix : sig val ( |? ) : 'a option -> '-> 'end
  val may : f:('-> unit) -> 'a option -> unit
  val map : f:('-> 'b) -> 'a option -> 'b option
  val map_default : f:('-> 'b) -> '-> 'a option -> 'b
  type 'a m = 'a option
  val return : '-> 'a m
  val bind : 'a m -> ('-> 'b m) -> 'b m
  val ( >>= ) : 'a m -> ('-> 'b m) -> 'b m
end