Source file optional_arg.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
open! Base
open! Import
open Ppxlib
type t = [ `Labelled of expression | `Optional of expression ] option
let of_optional_expr = Option.map ~f:(fun e -> `Optional e)
let to_expr t ~loc =
match t with
| None -> [%expr None]
| Some (`Optional v) -> v
| Some (`Labelled v) -> [%expr Some [%e v]]
;;
let to_arg t ~name =
Option.map t ~f:(function
| `Optional expr -> Optional name, expr
| `Labelled expr -> Labelled name, expr)
;;