Is all Haskell syntax pointfree compatible?

After reading the Haskell wiki article about pointfree style I naturally started playing around with with converting my regular code to pointfree. However, I immediately got stuck on the specific cases of 1) do syntax and 2) record syntax. For example: code: -------- playMusic rt = do [source] <- genObjectNames 1 buffer source $= getSound rt "music.wav" sourceGain source $= 0.4 loopingMode source $= Looping play [source] -------- And another (contrived) example: code: -------- data A = A { u :: Int , v :: Double , w :: String , ... } f a b = a { v = b } -------- -- frigidcode.com

Your analysis is basically correct. These syntactic features do not play nicely with pointfree style. But I can go into a bit more detail. It isn't surprising that do-notation prevents point-free style. The purpose of do-notation is to provide a nicer way to bind variables in monadic code. The goal of pointfree style is to get rid of unneeded variable bindings. In fact, if you have a function written with do-notation that can be translated into pointfree style, then you don't need do-notation. For example, beginners will often write code like this: do { x <- m ; f x } When they could write the much simpler: m >>= f Record notation is a different situation. The notation itself is very pointy, but the notation is optional. Using lenses to access and update your records might be a good way to integrate them into pointfree code. -Karl On Sat, Nov 24, 2012 at 2:13 AM, Christopher Howard < christopher.howard@frigidcode.com> wrote:
After reading the Haskell wiki article about pointfree style I naturally started playing around with with converting my regular code to pointfree. However, I immediately got stuck on the specific cases of 1) do syntax and 2) record syntax. For example:
code: -------- playMusic rt = do [source] <- genObjectNames 1 buffer source $= getSound rt "music.wav" sourceGain source $= 0.4 loopingMode source $= Looping play [source] --------
And another (contrived) example:
code: -------- data A = A { u :: Int , v :: Double , w :: String , ... }
f a b = a { v = b } --------
-- frigidcode.com
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
participants (2)
-
Christopher Howard
-
Karl Voelker