What does "point-free" mean in Haskell?
In Haskell, there are two ways to write a function definition. Consider the following functions: 1
foo :: a -> b
bar :: b -> c
foobar :: a -> cTo define foobar, one can either do
foobar a = bar (foo a) or
foobar = bar . foo. The second
definition is known as "point-free". This is despite
the fact that the operator for combining functions
together is literally a point. 1
Defining a function with the arguments, as in
foobar a = bar (foo a), is known as
extensional equality or point-wise
equality. The values of the arguments are sometimes
called points. 1
Defining the function without the arguments, as
in foobar = bar . foo, is known as
morphism equality. That is, the morphism
foobar is the same as the composition
of the functions foo and
bar. Since no argument, or
points, were referred to, this is known as
point-free. 1