On Sunday 26 July 2009 10:54:53 pm Linker wrote:
> Sorry.I defined a function :
>
> *GHCi, version 6.10.3: http://www.haskell.org/ghc/  :? for help*
> *Loading package ghc-prim ... linking ... done.*
> *Loading package integer ... linking ... done.*
> *Loading package base ... linking ... done.*
> *Prelude> sqrt $ 3 + 4 + 9*
> *4.0*
> *Prelude> let f $ x = f x*
> *Prelude> sqrt $ 3 + 4 + 9*
> *14.732050807568877*
> *Prelude>*

Unless otherwise specified, operators receive precedence (I think) infixl 9.

The ($) in the prelude is infixr 0, so

    sqrt $ 3 + 4 + 9 = sqrt (3 + 4 + 9)

When you define your own ($) in that session, you don't give a corresponding 
fixity declaration, so infixl 9 is assumed. Thus your second expression parses 
thusly:

    sqrt $ 3 + 4 + 9 = (sqrt 3) + 4 + 9

You can give fixity declarations in lets and wheres, so:

    let infixr 0 $ ; f $ x = f x

should act the same as the prelude-defined operator.

-- Dan
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to