There is a project I'm working on to eliminate the latter bit - ideally, a way to represent these complex types with "zero type-level code"