type source_loc = { row : int; col : int } [@@deriving compare, equal]
let conv_loc (pos : Sexplib.Src_pos.Relative.t) : source_loc =
match pos with
| { row; col } -> { row; col }
Why I am defining this in the first place: for the [@@deriving compare, equal]
the conv_loc code seems convoluted; is there a way to simplify this function ?
Thanks!
You can re-export types to let ppx derivers works on the full type definition while keeping the two types equal:
type source_loc = Sexplib.Src_pos.Relative.t = { row : int; col : int }
[@@deriving compare, equal]
3 Likes
Other things being equal, this should be the same as:
let conv_loc ({ row; col } : Sexplib.Src_pos.Relative.t) : source_loc = { row; col }
This looks like a gap in my OCaml knowledge. Where did you learn this ?
Since this is not that intuitive for people not (very?) familiar with ppxs and types definitions, this is explained in ppx_deriving
documentation: GitHub - ocaml-ppx/ppx_deriving: Type-driven code generation for OCaml .
1 Like