
Derek Elkins wrote:
Andrew Pimlott wrote:
I think this post should go under the heading "($) considered harmful". I've been bitten by this, and I never use ($) anymore in place of parentheses because it's too tempting to think of it as syntax.
I find this position ridiculous. [...] If you ever make a mistake one way the type checker will tell you.
For what it's worth, this is not true in the presence of implicit parameters:
f :: ((?p :: Int) => Int) -> Int f g = let ?p = 1 in g
x,y :: Int x = let ?p = 2 in (f ?p) ==> 1 y = let ?p = 2 in (f $ ?p) ==> 2
I wouldn't mind ($) being magical, along the lines of the magical runST in a rank-1 type system. It would be nice to be able to use it in patterns too.
-- Ben
Moral of the story, and if I'm not mistaken, in your opinion, is not to use implicit parameters (as currently formulated). I.e. the consensus seems to be that this is implicit parameters' fault not ($)'s. Personally, I would mind ($) being magical. One of the nice things about Haskell is there is practically no magic. The last thing I want is Haskerl (http://www.dcs.gla.ac.uk/~partain/haskerl.html). runST simply had a rank-2 type that is not expressible in Haskell 98, it seems getting ($) to "work" would be qualitatively different.