let unopt = fun ?default v -> match v, default with | None, None -> raise (Invalid_argument "unopt None") | None, Some v -> v | Some v, _ -> v