Support for compact product-sum-product GADTs.
Example:
data Expr: Type of
::location: Location
lit: Nat -> Expr
add: Expr -> Expr -> Expr
a: Expr = Expr.lit loc0 23
b: Expr = Expr.add (merge loc0 loc1) a (Expr.lit loc1 100)
loc0_: Location = a::location ;;; no case analysis required
m: Unit = case a of
Expr.lit \_loc val => unit
Expr.add \_loc left right => unit
Support for compact product-sum-product GADTs. Example: