有没有办法在列表中间模式匹配值?还是在最后?

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但是知道其他语言模式匹配如何实现这一点可能会很有趣.

kam*_*tsu 6

尽管有其他答案,您可以使用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)

  • 不会使用`mapMaybe test`或只是`fst.partitionEithers`还好吗? (2认同)