What would it take to unify the parsetree with the typedtree?

There is an parsing/ast_helper module with Pat module with the following not-smart-enough function:

val construct: ?loc:loc -> ?attrs:attrs -> lid -> pattern option -> pattern

You should indeed feel free to send a PR to add

val construct_n: ?loc:loc -> ?attrs:attrs -> lid -> pattern list -> pattern

I see a couple other improvements (Texp_construct would benefit from the same helper, Texp_extension_constructor needs help, exception patterns can be improved, etc.) from looking at Untypeast this way, but nothing that would clearly require a fundamentally different approach.