История изменений
Исправление qnikst, (текущая версия) :
Ну я поиграл по их правилам немного, сделав структуру как просили. То, что тут две задачи - об этом забыди - одна сделать структуру с требуемыми свойствами, другая сделать flatten. При этом им ещё хочется без «тегов» (конструкторов), которые в лиспе есть под капотом, и там любой тип умеет в typeof :: Lispy -> TypeRep, и cast :: Lispy -> TypeRep -> Lispy, где Lispy это внутреннее представление типов, а TypeRep внутренне описание типа, что уже странно.
Исходная версия qnikst, :
Ну я поиграл по их правилам немного, сделав структуру как просили. То, что тут две задачи - об этом забыди - одна сделать структуру с требуемыми свойствами, другая сделать flatten. При этом ещё хочется без «тегов» (конструкторов), которые в лиспе есть под капотом, и там любой тип умеет в typeof :: Lispy -> TypeRep, и cast :: Lispy -> TypeRep -> Lispy, где Lispy это внутреннее представление типов, а TypeRep внутренне описание типа.