我有一个生成Maybe a类型的函数,我在函数中使用它来生成一个Either b a.有没有一种方法,我可以映射Nothing到Left x简化我的代码?以下代码给出了一些上下文:
rmX :: ... -> Maybe a
cvX :: ... -> Either CVXError a
data CVXError = BadIndex | NoCover | NoSpace
cvX ... =
...
case rmx 1 xs of
Nothing -> Left NoSpace
Just p -> Right (x2:x1:(fromJust (rmX (-1) p)))
-- given that rmX always passes on negative value arg
Run Code Online (Sandbox Code Playgroud)
case语句只是乞求被替换fmap,但问题是,我不知道如何"地图" Nothing,以Left NoSpace在fmap通话或甚至提取这种模式让我自己UTIL功能.
你正在寻找这个maybe功能:
cvX ... =
...
maybe (Left NoSpace) (\p -> Right (x2:x1:(fromJust (rmX (-1) p)))) $
rmX 1 xs
Run Code Online (Sandbox Code Playgroud)