Coding Problems!! Please help

John Hughes rjmh@cs.chalmers.se
Wed, 17 Apr 2002 11:16:42 +0200 (MET DST)


	I am currently working on an assignment with requires us to write in
    Haskell. I am having trouble with "pipeline". The required textbook
    called, "The Craft of Functional Programming" 2nd Edition.  There is a
    pipeline example, which I find it useful in my assignment, but for some
    reason, there may be a typo in the pipeline syntax, which is ">.>". Coz it
    doesn't compile.

Your problem is that that book defines and uses a non-standard composition
operator.

The standard Haskell function composition is written just ".", defined by

    (f . g) x = f (g x)

Notice that in f . g, it is *g* which is applied first to the argument, and f
which is applied to the result of that. That is, composition is "backwards" in
some sense. Here's an example:

     sqrt . abs

takes the absolute value of its argument first, and then the square root of
that, not the absolute value of the square root (which would fail for negative
arguments).

Many people (including mathematicians) prefer to write the arguments of
compose in the other order, so that the first function to be applied is the
first one you write. To make that possible, Simon Thompson defines

    (f >.> g) x = g (f x)

So now you would write the example above as

    abs >.> sqrt

You take the absolute value first, so you write it first.

Regardless of which you prefer, the important thing to understand is that >.>
IS NOT PART OF THE HASKELL STANDARD. So if you want to use it, you have to
include the definition above in your own program.

John Hughes