[Haskell-cafe] Exercise in point free-style

Udo Stenzelu.stenzel at web.de
Fri Sep 1 14:14:44 EDT 2006


Julien Oster wrote: > While we're at it: The best thing I could come up for >> func2 f g l = filter f (map g l) >> is >> func2p f g = (filter f) . (map g) >> Which isn't exactly point-_free_. Is it possible to reduce that further?  Sure it is: func2 f g l = filter f (map g l) func2 f g = (filter f) . (map g) -- definition of (.) func2 f g = ((.) (filter f)) (map g) -- desugaring func2 f = ((.) (filter f)) . map -- definition of (.) func2 f = flip (.) map ((.) (filter f)) -- desugaring, def. of flip func2 = flip (.) map . (.) . filter -- def. of (.), twice func2 = (. map) . (.) . filter -- add back some sugar The general process is called "lambda elimination" and can be done mechanically. Ask Goole for "Unlambda", the not-quite-serious programming language; since it's missing the lambda, its manual explains lambda elimination in some detail. I think, all that's needed is flip, (.) and liftM2. Udo. -- I'm not prejudiced, I hate everyone equally. -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 189 bytes Desc: Digital signature Url : http://www.haskell.org//pipermail/haskell-cafe/attachments/20060901/0ae6f702/attachment.bin


More information about the Haskell-Cafe mailing list
close