[Haskell-cafe] The difference between ($) and application
andrew at pimlott.net
Tue Dec 14 22:46:36 EST 2004
On Tue, Dec 14, 2004 at 01:49:57PM -0500, Derek Elkins wrote:
> > On Mon, Dec 13, 2004 at 07:49:00PM -0800, oleg at pobox.com wrote:
> > > The operator ($) is often considered an application operator of a
> > > lower precedence. Modulo precedence, there seem to be no difference
> > > between ($) and `the white space', and so one can quickly get used
> > > to treat these operators as being semantically the same. However,
> > > they are not the same in all circumstances. I'd like to observe an
> > > important case where replacing the application with ($) in a
> > > fully-parenthesized expression can lead to a type error.
> > I think this post should go under the heading "($) considered
> > harmful".
> I find this position ridiculous.
By "considered harmful", I mean roughly "shouldn't be taught to
beginners". Something that doesn't seem problematic at first, but
almost inevitably leads to trouble. I think ($) fits this description.
When I first saw the use of ($), I automatically thought of it as
syntax. When I saw its definition, I thought it was cool that I could
create "syntax" in this way. This is a precarious position. It didn't
bite me for a long time, but when it finally did, it took a while to
figure out what went wrong, and I had to disband an old idea. To
continue using it when it is safe, I would either have to keep thinking
of it as syntax, which could lead me into another mistake, or repeatedly
verify that it is safe, which would be a drag. Even if I were happy
with one of those alternatives, I might be setting a trap for anyone
reading my code. So I think ($) as syntax shoud generally be avoided.
> I don't recall anyone ever posting a
> message about this (though I'd be far from surprised if someone did).
I believe I first learned about this issue from a posting. If I hadn't,
I may have had even more trouble diagnosing it when it happened to me!
> It seems that the people who decide they need higher-rank types are
> capable of handling type errors involving them, and they certainly
> don't confuse ($) for syntax.
I doubt that's true. Applications of higher-rank types are pretty
common, and I think many people start using them without understanding
all the implications.
On Tue, Dec 14, 2004 at 07:27:51PM +0000, Ben Rudiak-Gould wrote:
> I wouldn't mind ($) being magical, along the lines of the magical runST
> in a rank-1 type system.
That would be fine. I like a touch of syntactic sugar when it's pure
More information about the Haskell-Cafe