will GHC optimize pattern-matching on integers?

Suppose I am doing a pattern match on a large number of consecutive (or mostly-consecutive) integers: foo 0 = something foo 1 = somethingElse ... foo 1000 = anotherThing Will GHC optimize this to a table lookup, or is it going to test each integer in turn? Am I better off using a Vector or Map instead of pattern matching? Thanks, --Patrick

Hi Patrick,
Yes, this will optimise to "a nice balanced tree of decisions with dense
jump tables in the leafs" [1]. You can check out the comments in [1] for
more details.
[1] https://github.com/ghc/ghc/blob/master/compiler/cmm/CmmSwitch.hs#L37
Hope that helps,
Rahul
On Thu, Apr 13, 2017 at 3:55 AM, Patrick Pelletier wrote: Suppose I am doing a pattern match on a large number of consecutive (or
mostly-consecutive) integers: foo 0 = something
foo 1 = somethingElse
...
foo 1000 = anotherThing Will GHC optimize this to a table lookup, or is it going to test each
integer in turn? Am I better off using a Vector or Map instead of pattern
matching? Thanks, --Patrick _______________________________________________
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners --
Rahul Muttineni

Thanks! That's exactly what I was hoping. --Patrick On 4/13/17 1:41 AM, Rahul Muttineni wrote:
Hi Patrick,
Yes, this will optimise to "a nice balanced tree of decisions with dense jump tables in the leafs" [1]. You can check out the comments in [1] for more details.
[1] https://github.com/ghc/ghc/blob/master/compiler/cmm/CmmSwitch.hs#L37
Hope that helps, Rahul
On Thu, Apr 13, 2017 at 3:55 AM, Patrick Pelletier
mailto:code@funwithsoftware.org> wrote:
Suppose I am doing a pattern match on a large number of consecutive (or mostly-consecutive) integers:
foo 0 = something foo 1 = somethingElse ... foo 1000 = anotherThing
Will GHC optimize this to a table lookup, or is it going to test each integer in turn? Am I better off using a Vector or Map instead of pattern matching?
Thanks,
--Patrick
_______________________________________________ Beginners mailing list Beginners@haskell.org mailto:Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
-- Rahul Muttineni
_______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
participants (2)
-
Patrick Pelletier
-
Rahul Muttineni