Каков наиболее эффективный способ сериализации конечных (нерекурсивных) типов алгебраических данных, которые состоят только из конструкторов?
например.
p = A
| B q
q = C
| D r
| E
r = F
| G
Вручную перечисление всех допустимых комбинаций для этого тривиально малого определения возможно:
A 0x00
B C 0x01
B D F 0x02
B D G 0x03
B E 0x04
-
Есть ли более широкая теория здесь?
-
Как насчет того, добавим ли мы типы неконструктора, такие как int и т.д.?
-
Как Haskell представляет их в памяти (это позволяет рекурсию, поэтому, возможно, нужны указатели/ссылки)?