haskell - Haskell 中的模式匹配序列

标签 haskell pattern-matching

模式匹配是最优雅的 Haskell 特性之一。

我最近一直在做一个需要队列数据结构的项目,所以我正在使用 Data.Sequence。但是,看起来我必须放弃模式匹配的优雅并求助于守卫:

floodFillWorker :: Image -> RGBAColor -> Double -> PixelQueue -> Image
floodFillWorker image base tolerance queue 
    | Seq.null queue = image
    | otherwise      = doSomeWork image

我可以对序列使用模式匹配还是需要使用 guard ?

最佳答案

ehemient 在 View 模式的正确轨道上,但我认为有一种方法可以做到这一点,实际上非常好。 Data.Sequence实际上是在考虑 View 的情况下编写的,您应该使用 ViewLViewR类型以便在数据结构上进行模式匹配。

{-# LANGUAGE ViewPatterns #-}

floodFillWorker image _ _ (Seq.viewl -> EmptyL) = image
floodFillWorker image base tolerance queue = doSomeWork image

关于haskell - Haskell 中的模式匹配序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2078042/

相关文章:

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

haskell - Aeson:将动态键解析为类型字段

haskell - 将字符串中的重复字符替换为 '_'

haskell - 难以将 Relation 类型定义为 Category 类的实例

postgresql - 捕获多种类型的异常

Haskell:未定义值的模式匹配

JavaScript 防止无限循环 - 可能使用动态识别模式?

erlang - 动态模式匹配

haskell - Haskell 支持哪些多态类型?

scala - 在 Scala 中,如何根据带有类型参数的类型测试 'Any' 对象的类型?