
Brian Hulley wrote:
Ben Rudiak-Gould wrote:
Paul Hudak wrote:
Minor point, perhaps, but I should mention that : is not special syntax -- it is a perfectly valid infix constructor.
<snip> ... but no more confusing than the fact that [f x | x <- xs] is not the same as (map f xs).
Can you explain why? On page 258 of Paul Hudak's book "The Haskell School of Expression" he states that do x<- xs; return (f x) is equivalent to [f x | x <- xs] "which is clearly just map f xs"
I can't find anything wrong with the example in the book but perhaps I've missed something?
He may mean that if you *redefine* the operator Prelude.((:)) then the desugaring and other steps may end up binding the old or the new (:) and no longer be identical. This is touched on in http://www.haskell.org/ghc/docs/6.4.1/html/users_guide/syntax-extns.html#reb... In particular, if you redefine Monad, then [ f x | x<-xs ] and do {x<-xs; return x} may no longer mean the same thing.