An Alternative Notation

The problem with learning concepts from lambda calculus is that you have to deal with lambda calculus

To mitigate this language’s effect on the eyes, I will be using a notation that I came up with a while back. I hope it helps…

We can translate the formal λ notation:

S := λx.λy.λz.x z (y z)

Into a more familiar syntax:

S = x -> y -> z -> x(z, y(z))

But, we don’t need to explicitly curry our functions either.

Why not use a product type?

x * y * z -> x(z, y(z))

Or even the most common syntax for function arguments, a list?

(x, y, z) -> x(z, y(z))

Remember, it’s still curried.

Sometimes, it makes more sense to apply functions left to right.

Instead of f(x) (read “f of x”)

We can use x > f (read “x into f”)

This is very beneficial for readability with highly nested compositions.

h(g(y, f(x, z)))

Can be expressed as a natural flow of data: