sig
  type 'a t = 'a option
  val some : '-> 'a option
  val may : ('-> unit) -> 'a option -> unit
  val map : ('-> 'b) -> 'a option -> 'b option
  val bind : 'a option -> ('-> 'b option) -> 'b option
  val apply : ('-> 'a) option -> '-> 'a
  val filter : ('-> bool) -> 'a option -> 'a option
  val default : '-> 'a option -> 'a
  val ( |? ) : 'a option -> '-> 'a
  val default_delayed : (unit -> 'a) -> 'a option -> 'a
  val map_default : ('-> 'b) -> '-> 'a option -> 'b
  val map_default_delayed : ('-> 'b) -> (unit -> '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 : '-> 'BatOption.Monad.m
      val bind :
        'BatOption.Monad.m ->
        ('-> 'BatOption.Monad.m) -> 'BatOption.Monad.m
    end
  val ord : 'BatOrd.ord -> 'a option BatOrd.ord
  val print :
    ('BatInnerIO.output -> '-> unit) ->
    'BatInnerIO.output -> 'BatOption.t -> unit
  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 -> '-> 'a
      val ( >>= ) : 'a option -> ('-> 'b option) -> 'b option
    end
end