Data.OpenUnion
data Union r a
decomp
weaken
extract
class Member t r
type family Members m r :: Constraint where ...