Say I have a data type, with hundreds of data constructors:
data Goo 
  = Goo001
  | Goo002
  | Goo003
  ...
  | Goo999
and I make a function that pattern matches on every one of those constructors:
  func :: Goo -> Int
  func Goo001 = 78
  func Goo002 = 93
  func Goo003 = 789
  ...
  func Goo999 = 1
Does GHC optimize the different function equations in any way, so that to match Goo999, it doesn't have to try to match on all the previous 998 equations?
Or would it be better to make a Data.Map Goo Int and make func do a lookup on that map?
