-let xs_to_string ?(sep=", ") ~f xs =
- xs |> List.map ~f |> String.concat ~sep
+let xs_to_string ?(sep=",") ~f ~indent xs =
+ let i = Indent.to_string indent in
+ xs |> List.map ~f:(fun x -> i ^ (f x)) |> String.concat ~sep
+
+let mexp name params ~indent =
+ let params = xs_to_string ~f:(fun x -> x) ~indent params in
+ sprintf "%s[%s]" name params
+
+let field_to_string ~indent (Field {name; typ; _}) =
+ let name = Sym.to_string name in
+ let typ = Sym.to_string typ in
+ let indent = Indent.to_string indent in
+ sprintf "%s%s : %s" indent name typ