0xd34df00d
20.03.2012 19:51 Azoth_primary
Кажется, я не понимаю экзистенциальные типы.
Recommended by:
@pooq: моча съела говно
что именно тебя смущает?
Есть дерево выражения — data ExprTree = BinaryNode BiFunc (ExprTree a) (ExprTree a) | UnaryNode UnFunc (ExprTree a) | VarNode String | ConstNode a (если упрощать).
Есть data TaggedTree t = то же самое, но у каждой из четырех нод еще стоит t — мне нужно рядом с узлами хранить кое-какую информацию из них.
Дана функция, делающая из Tree тег. Если Tree — не ConstNode и не VarNode, то она юзает теги нижележащих деревьев.
Есть функция fromET :: (ExprTree a → t) → ExprTree a → TaggedTree a t
Нужно: наиболее красиво и няшно запилить протегивание дерева указанной функцией.
казалось бы, при чем здесь existentials
У меня была мысль представить каждый возможный тип узла как existential с соответствующей функцией получения значения тега, но я нихуя не понял и забил. Щас набросаю тупой вариант и запощу сюда, пожалуй.
ну йома, existential types это все равно шо интерфейс в жаве или сигнатура модуля в SML / OCaml
Ну вот и получается интерфейс, чо.