Question

Is there a valid way to do the following in Haskell:

case n of
    0     -> doThis
    1     -> doThat
    2     -> doAnother
    3..99 -> doDefault

other than to have 97 lines of "doDefault" ?

Was it helpful?

Solution

case n of
    0     -> doThis
    1     -> doThat
    2     -> doAnother
    _     -> doDefault

If you really need a range,

case n of
    0     -> doThis
    1     -> doThat
    2     -> doAnother
    x | 3 <= x && x < 100 -> doDefault
    _     -> reallyDoDefault

OTHER TIPS

Using guards! ;)

Foo n 
  | n == 0 = doThis
  | n == 1 = doThat
  | n == 2 = doAnother
  | (n >= 3 ) && (n <= 99) = doDefault 


OR

  | n `elem` [3..99] =  doDefault

I think you can have the default case be the _ pattern, which matches on anything.

case n of
  0 -> doThis
  1 -> doThat
  2 -> doAnother
  _ -> doDefault

I'm not sure if that's quite what you're looking for, since it doesn't check the upper bound on the range there... you might want to use guards instead.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top