David Morse dcmorse at gmail.com
Thu Jan 22 22:08:40 EST 2009

```On Thu, Jan 22, 2009 at 10:01 PM, Erik de Castro Lopo
<mle+cl at mega-nerd.com> wrote:
>
> Hi all,
>
> Ocaml's match .. with expression (very similar to Haskell's case)
> allows multiple matches for a single result (naive example):
>
>    let f x =
>        match x with
>        | 0 -> "zero"
>        | 1 | 3 | 5 | 7 -> "odd"
>        | 2 | 4 | 6 | 8 -> "even"
>
> Is there a similar thing in Haskell? At the moment I have to do
> something like :
>
>    f x =
>        case x of
>          0 -> "zero"
>          1 -> "odd"
>          3 -> "odd"
>          5 -> "odd"
>          7 -> "odd"
>          2 -> "even"
>          4 -> "even"
>          6 -> "even"
>          8 -> "even"

Well you can guard each clause:

case x of
0 -> "zero"
n | even n -> "even"
| odd n -> "odd"

Still not quite exactly what you've got.

So you could really hammer it with blunt force:

case x of
0 -> "zero"
n | n `elem` [1,3,5,7] -> "odd"
| n `elem` [2, 4, 6, 8] -> "even"