繁体   English   中英

Haskell中的模式匹配Seq

[英]Pattern-matching Seq's in Haskell

模式匹配是最优雅的Haskell功能之一。

我最近在一个项目上工作,我需要一个队列数据结构,所以我正在使用Data.Sequence。 然而,看起来我必须放弃模式匹配的优雅并诉诸守卫:

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

我可以使用模式匹配序列,还是需要使用警卫?

ephemient在视线模式的正确轨道上,但我认为有一种方法可以做到这一点,实际上相当不错。 Data.Sequence实际上是在考虑视图的情况下编写的,您应该使用ViewLViewR类型来对数据结构进行模式匹配。

{-# LANGUAGE ViewPatterns #-}

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

可以使用视图模式而不是守卫,但实际上它并不是更好(IMO)。 卫兵看起来很好......

{-# LANGUAGE ViewPatterns #-}

floodFillWorker image _ _ (Seq.null -> True) = image
floodFillWorker image base tolerance queue = doSomeWork image

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM