Type families for working with trees and lists of types, without requiring UndecidableInstances