The Named constructor both allows for custom implementations of generics
based on name and provides a way to represent recursive types, the lazy
part dealing with cycles
head ty is used to traverse the Named constructor. It might be used when one
care to pattern match directly on the representation in a low level way rather than
going through a full generic. head t is t if t is not of the form Named _