Lee*_*eeG 1 haskell either maybe
我正在尝试使用Data.Map将字符串映射到函数.我遇到的问题是我的程序中的主要错误处理使用了Either monad,Map.lookup并将返回Maybe ([SomeVal] -> Either ValError SomeVal).我怎样才能使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]
Run Code Online (Sandbox Code Playgroud)
该Control.Error包具有很好的功能
note :: e -> Maybe a -> Either e a
note e Nothing = Left e
note _ (Just a) = Right a
Run Code Online (Sandbox Code Playgroud)
这对于"升级" Maybe类故障很有用Either.
lookupNote :: k -> Map.Map k v -> Either ValError v
lookupNote k = note (Missing k) . lookup k
Run Code Online (Sandbox Code Playgroud)
它也有很多人喜欢本作的变压器之间的映射Either,并Maybe和通用MonadPlus的实例.我强烈推荐那个包.
其他答案已经解释了如何Maybe变成Either一般.但是,Data.Map具体而言,Map.lookup您可以使用Map.findWithDefault,而不是包装,Maybe并允许您选择如何处理不存在的键.
| 归档时间: |
|
| 查看次数: |
1108 次 |
| 最近记录: |