Есть произвольный экземпляр некого ADT (скажем, Left 5) и хочется превратить его в конструкцию вида (C, [V]), где C это некоторое представление конструктора, а [V] — спискок аргументов. Причем так, чтобы потом можно было собрать все обратно. И очень желательно иметь возможность превращать C и V в String и назад.
Поски в области generic programming in Haskell пока что наводят на мысль, что C это скорее всего Constr, а V это быть может Dynamic. Но как распилить а потом запилить обратно (потенциально, после некоторых подкручиваний) — не ясно.
Есть ли у уважаемых специалистов идеи на этот счет?