Alternative multirec instances deriver

New features/changes:

  • Works with arbitrary monomorphic types, e.g. ([Int],String), not just names that refer to monomorphic types.

  • The names of the "proof" constructors (= constructors of the family GADT) are now specified by the user. This is useful if you're working with existing code where some type's name is already taken on the value level, so you can't have a proof of that name.

  • The names of the constructor-representing empty types are also customizable now.

  • Optionally, the type sums in the pattern functor are balanced trees of (:+:) rather than right-nested ones. This cuts down the size of the value-level code (and hopefully helps with compilation time).