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