haskell - 有没有办法对列表中间的值进行模式匹配?还是在最后?

标签 haskell pattern-matching

有点像

getFirstError :: [Either a b] -> a
getFirstError (x:y:...:Left w:z) = w

使用 Haskell,但了解其他具有模式匹配的语言如何实现这一点可能会很有趣。

最佳答案

尽管有其他答案,您可以使用 GHC 中的 View 模式扩展来执行此操作:

   getFirstError ((msum . map test) -> Just x) = x
        where test (Left x) = Just x
              test (Right x) = Nothing

或者使用模式守卫:

   getFirstError (xs) | Just x <- (msum $ map test xs) = x
        where test (Left x) = Just x
              test (Right) x = Nothing

关于haskell - 有没有办法对列表中间的值进行模式匹配?还是在最后?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6634466/

相关文章:

haskell - 关于上下文中的值(应用于 Monad)

text - 如何使用 sed/awk 从文件中删除文本 block (模式)

scala - 如何在 Scala 中对列表中的两个邻居求和

haskell - 自动收集所有快速检查

haskell - 管道:提取后续数字

haskell - Haskell 的箭头运算符的 'real' 名称是什么?

regex - Solaris 11 中的字符串替换

java - 我从哪里开始进行文本模式识别 - 基于 Java

c# - 正则表达式 - 将电子邮件地址与异常(exception)情况相匹配

algorithm - Haskell 中的板遍历函数返回重复项