sig
  val map : ('-> 'b) -> 'a option -> 'b option
  val bind : ('-> 'b option) -> 'a option -> 'b option
  val unsome : '-> 'a option -> 'a
  val equal : ('-> '-> bool) -> 'a option -> 'a option -> bool
end