[Haskell-cafe] Re: Why is $ right
associative insteadofleftassociative?
Brian Hulley
brianh at metamilk.com
Sun Feb 5 16:40:16 EST 2006
Chris Kuklewicz wrote:
> 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#rebindable-syntax
>
> In particular, if you redefine Monad, then [ f x | x<-xs ] and do
> {x<-xs; return x} may no longer mean the same thing.
Thanks. I didn't realise that list comprehension syntax was not just a sugar
for the equivalent do expression but I see now that it is indeed translated
differently, bypassing monads altogether, which of course is confusing but
understandable if monads were only thought up after list comprehensions were
already in the language.
Regards, Brian.
More information about the Haskell-Cafe
mailing list