Я пытаюсь использовать Data.Map для привязки строк к функциям. Проблема, с которой я сталкиваюсь, заключается в том, что основная обработка ошибок в моей программе использует любую монаду, а Map.lookup
вернет Maybe ([SomeVal] -> Either ValError SomeVal)
. Как я могу сделать Map.lookup
играть красиво с Либо монадой в этом случае?Как использовать Data.Map.lookup в контексте любой монады?
apply :: String -> [SomeVal] -> Either ValError SomeVal
apply s args = (Map.lookup s prims) >>= \fn -> fn args
prims :: Map String ([SomeVal] -> Either ValError SomeVal)
prims = Map.fromList
[("key", function)
,("key2", function2)
]
::> apply "key" [val1, val2, val3]
Мне нравится второй случай: возможно, это сложная небольшая функция ... рад, что я знаю об этом сейчас. – LeeG