Search code examples
haskellpointfree

Is there a better way to express the absolute error function in point-free notation?


In pointful notation:

absoluteError x y = abs (x-y)

An unclear example in pointfree notation:

absoluteError' = curry (abs . uncurry (-))


Solution

  • Here's how you could derive it yourself, in small steps:

    absoluteError x y = abs (x-y) = abs ((-) x y) = abs ( ((-) x) y) 
                      = (abs . (-) x) y = ( (abs .) ((-) x) ) y = 
                      = ( (abs .) . (-) ) x y
    

    so, by eta-reduction, if f x y = g x y we conclude f = g.

    Further, using _B = (.) for a moment,

    (abs .) . (-) = _B (abs .) (-) = _B (_B abs) (-) = (_B . _B) abs (-)
                  = ((.) . (.)) abs (-)