Pattern matching is one of the most elegant Haskell features.
I've been working on a project recently where I need a queue data structure so I'm using Data.Sequence. However, it looks like I have to give up the elegance of pattern matching and resort to guards:
floodFillWorker :: Image -> RGBAColor -> Double -> PixelQueue -> Image
floodFillWorker image base tolerance queue
| Seq.null queue = image
| otherwise = doSomeWork image
Can I use pattern matching with sequences or do I need to use guards?
ephemient is on the right track with view patterns but I think there's a way to do it which is actually quite nice. Data.Sequence
was actually written with views in mind and you should use either the ViewL
or ViewR
types in order to patternmatch on the data structure.
{-# LANGUAGE ViewPatterns #-}
floodFillWorker image _ _ (Seq.viewl -> EmptyL) = image
floodFillWorker image base tolerance queue = doSomeWork image
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With