On Sun, Dec 2, 2012 at 5:31 AM, Christopher Howard <christopher.howard@frigidcode.com> wrote:
> But I have a compulsive hatred of duplication. 

And thus haskell code golfing is born! Actually that's not always true. The motivation is sometimes compellingly noble. E.g. we want a faithfully compact translation of (English!)

"Given some number compute both its sine and cosine, both scaled by velocityC."

into

import Control.Arrow( (***), (&&&) )
import Control.Monad( join )

f = join (***) (velocityC*) . (sin &&& cos)

Unfamiliarity with symbol-rich combinators has been known to exact cognitive pain, leading to unfortunate comparisons with Perl. Evidently, the story isn't always driven by sadism.

Credits: I asked a similar question years ago [1] and got a heap of useful replies. Special mention to Robert Vollmert and Luke Palmer for help arriving at the above version.

[1] http://www.haskell.org/pipermail/haskell-cafe/2009-February/056195.html

-- Kim-Ee


On Sun, Dec 2, 2012 at 5:31 AM, Christopher Howard <christopher.howard@frigidcode.com> wrote:
Can application of an expression (to a function) be treated like a
function itself? In my specific case, I started with this expression:

code:
--------
(cos b * velocityC, sin b * velocityC)
--------

But I have a compulsive hatred of duplication. I happened to have this
function handy called appPair:

code:
-------
appPair f (a, b) = (f a, f b)

appPair (* velocityC) (cos b, sin b)
-------

Better, but the b identifier is still duplicated. Is there some way I
could have...

code:
--------
appPair (?) (cos, sin)
--------

...shifting the application of b into the (* velocityC) expression,
without modifying my appPair function?

--
frigidcode.com


_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://www.haskell.org/mailman/listinfo/beginners