I have this function

def andThen[A,B,C](f: A => B, g: B => C): A => C = {

a => g(f(a))

}

I am trying to prove right association is the same as left association. But i end up with this and they seem different…some help please

```
//right association
f andThen (g andThen h)
//inline outer andThen
a => (g andThen h)(f(a))
//inline inner andThen
a => (b => h(g(b))(f(a))
//apply f(a)
a => (f(a) => h(g(f(a))))
// left association
(f andThen g) andThen h
//inline outer andThen
a => h((f andThen g)(a))
//inline innner andThen
a => h((b => g(f(b)))(a))
//apply a
a => h(a => g(f(a)))
```

Disclaimer, I do not know formal terms.

But, your problem is the way you are applying the function.

So, let’s just focus on that part first.

// If I have a function like

a => a + 1

// And I want to apply it to some value, like:

(a => a + 1)(2)

// I would replace it like this:

2 + 1

// Basically, replacing all the occurrences of the left variable in the right expression.

So, returning to your prove.

// Right association.

f andThen (g andThen h)

// Inline outer andThen

a => (g andThen h)(f(a))

// Inline inner andThen

a => (b => h(g(b))(f(a))

// Apply f(a)

a => h(g(f(a)))

// Left association.

(f andThen g) andThen h

// Inline outer andThen

a => h((f andThen g)(a))

// Inline innner andThen

a => h((b => g(f(b)))(a))

// Apply a

a => h(g(f(a)))

And now you can see both sides are reduced to the same expression.

1 Like