Bil*_*ill 15 haskell pattern-matching
模式匹配是最优雅的Haskell功能之一.
我最近在一个项目上工作,我需要一个队列数据结构,所以我正在使用Data.Sequence.然而,看起来我必须放弃模式匹配的优雅并诉诸守卫:
floodFillWorker :: Image -> RGBAColor -> Double -> PixelQueue -> Image
floodFillWorker image base tolerance queue
| Seq.null queue = image
| otherwise = doSomeWork image
Run Code Online (Sandbox Code Playgroud)
我可以使用模式匹配序列,还是需要使用警卫?
sve*_*son 17
ephemient在视线模式的正确轨道上,但我认为有一种方法可以做到这一点,实际上相当不错.Data.Sequence实际上是在考虑到视图的情况下编写的,您应该使用ViewL或者ViewR类型来对数据结构进行模式匹配.
{-# LANGUAGE ViewPatterns #-}
floodFillWorker image _ _ (Seq.viewl -> EmptyL) = image
floodFillWorker image base tolerance queue = doSomeWork image
Run Code Online (Sandbox Code Playgroud)
您可以使用视图模式而不是守卫,但实际上它并不是更好(IMO).卫兵看起来很好......
{-# LANGUAGE ViewPatterns #-}
floodFillWorker image _ _ (Seq.null -> True) = image
floodFillWorker image base tolerance queue = doSomeWork image
Run Code Online (Sandbox Code Playgroud)