sig
  val get_exn : exn -> 'a option -> 'a
  val fold : ('b -> 'a -> 'b) -> 'b -> 'a option -> 'b
  val map_fold : ('a -> 'b -> 'a * 'b) -> 'a -> 'b option -> 'a * 'b option
end