Rom*_*her 2 haskell pattern-matching
就像是
getFirstError :: [Either a b] -> a
getFirstError (x:y:...:Left w:z) = w
Run Code Online (Sandbox Code Playgroud)
wrt Haskell但是知道其他语言模式匹配如何实现这一点可能会很有趣.
尽管有其他答案,您可以使用GHC中的视图模式扩展来执行此操作:
getFirstError ((msum . map test) -> Just x) = x
where test (Left x) = Just x
test (Right x) = Nothing
Run Code Online (Sandbox Code Playgroud)
或者使用图案防护:
getFirstError (xs) | Just x <- (msum $ map test xs) = x
where test (Left x) = Just x
test (Right) x = Nothing
Run Code Online (Sandbox Code Playgroud)