В настоящее время я пишу язык программирования на Haskell. Этот язык программирования похож на Factor, являясь языком конкатенативного стека. Однако, забравшись довольно далеко, я наткнулся на кирпичную стену: у меня есть Data.Map типа:
Map.Map String ([YodaVal] -> YodaVal, Int)
Но мне нужны функции, хранящиеся в карте, чтобы использовать карту в качестве параметра, чтобы я мог сохранить среду при рекурсии, а также, возможно, разрешить рекурсивные определения функций и рекурсивные определения функций Haskell -> Yoda. Однако тогда тип будет выглядеть так:
type Env = Map.Map String ([YodaVal] -> Env -> [YodaVal] -> YodaVal, Int)
Что, конечно же, расширяется до:
Map.Map String ([YodaVal] -> Map.Map String ... -> [YodaVal] -> YodaVal, Int)