Do you think the approach can be extended for non-regular (nested) algebraic types (where the recursive data type is sometimes at a different type instance)? For instance, it's very handy to use GADTs to capture embedded language types in host language (Haskell) types, which leads to non-regularity.


I'm not sure I understand the case you are talking about. Can you write a simple example
of the types like this?
 
Cheers,
Anton