This is a good opportunity to use case syntax. You can also case on tuples, like this:

```
foo a b = case (a,b) of
  (A1,B1) -> fun1
  (A1,B2) -> fun2
  (A1,B3) -> fun3
  (A1,_)  -> fun4   <- this is probably not necessary anymore, unless you expect Rule2 to get more constructors.
  (A2,B1) -> fun5
  ...
```

On Thu, May 16, 2019 at 10:14 PM Magicloud Magiclouds <magicloud.magiclouds@gmail.com> wrote:
Hi,
I have trouble describing this clearly. Let me show code directly.

data Rule1 = A1 | A2 | A3
data Rule2 = B1 | B2 | B3

foo a b =
  if a == A1
    then if b == B1
      then fun1
      else if b == B2
        then fun2
        else if b == B3
          then fun3
          else fun4
...

Basically, Rule1 and Rule2 compose a matrix, for each case of Rule1
and Rule2, I need to do different things. Above is already long and
not quite clear, and it is far from complete.

So my question is, is there a way/lib that I can make this clear to
read/understand?
_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
Only members subscribed via the mailman list are allowed to post.


--
Nathan Bloomfield
Code Wrangler, Team Absinthe
Automattic, Inc.