-let rec string_of_patt_field { fpatt = fpatt; fpc = fpc } =
- let fpc = string_of_field_common fpc in
- let fpatt =
- match fpatt with
- | <:patt< $lid:id$ >> -> id
- | _ -> "[pattern]" in
- fpatt ^ " : " ^ fpc
-
-and string_of_constr_field { fexpr = fexpr; fec = fec } =
- let fec = string_of_field_common fec in
- let fexpr =
- match fexpr with
- | <:expr< $lid:id$ >> -> id
- | _ -> "[expression]" in
- fexpr ^ " : " ^ fec
-
-and string_of_field_common { flen = flen;
- endian = endian; signed = signed; t = t;
- _loc = _loc } =
+let patt_printer = function
+ | <:patt< $lid:id$ >> -> id
+ | _ -> "[pattern]"
+
+let expr_printer = function
+ | <:expr< $lid:id$ >> -> id
+ | _ -> "[expression]"
+
+let string_of_field { field = field; flen = flen;
+ endian = endian; signed = signed; t = t;
+ _loc = _loc;
+ printer = printer} =