
Hello all, I have two datatypes, both representing the same language. However, one is a "flattened" version of the other. For instance: data Flattened = Const Flattened | Sum Flattened Flattened | ... | IntConst Int | RealConst Float | BoolConst Bool | Void ---- data Term = Const Constant | Sum Term Term | ... data Constant = IntConst Int | RealConst Float | BoolConst Bool | Void Now I want to create functions to convert between these two datatypes. This is easy to do but *very* tedious in its most naive approach. However, I think I can use Data.Generics to make a simple implementation of both functions. The question is: can I? I think that this conversion is a simple fold over the structure, changing merely the constructor name (the qualified name, because the unqualified name is the same), but I cannot seem to understand from the documentation how to do this... Thanks in advance, Mark Smith