Question: I don't understand composing functions with arity > 1.
in ghci 7.4.1 i typed:

```
((*).succ) 3 4
> 16

```

i don't fully understand the math transformation but it's clear that it's the same as

```
(*) (succ 3) 4

```

but when i do:

```
( (\x y z -> x).(\a b -> a*b) ) 2 3 4 5
> 10
( (\x y z -> y).(\a b -> a*b) ) 2 3 4 5
> No instance for (Num (a0 -> t0))

```

and now i'm totally lost. can anyone explain what happens? ps. I know that everything in haskell has only 1 parameter but it doesn't really help me :)

Answer: 
Work it out this way:

```
(f . g) x = f (g x)
(f . g) x y = f (g x) y -- applying y

```

Then replace f with `(*)`, g with `succ` and x and y with their values:

```
((*) . succ) 3 4 = (*) (succ 3) 4
                 = (*) 4 4
                 = 16

```
In 

```
( (\x y z -> x).(\a b -> a*b) ) 2 3 4 5

```

1. they first evaluate (\a b -> a\*b) 2 resulting in function like this (\b -> 2\*b)
2. then evaluate (\x y z -> x) (\b -> 2\*b) 3 4 that say that take the function take the 3 and take the 4 and return the function, something like this: ((\b -> 2\*b) 3 4 -> (\b -> 2\*b))
3. and only remains (\b -> 2\*b) 5 resulting 2\*5 = 10

but in

```
( (\x y z -> y).(\a b -> a*b) ) 2 3 4 5

```

the second evaluation will result in this ((\b -> 2\*b) 3 4 -> 3) remaining 3 5 causing a error