Here is a practical example I ran into a few days ago. With this expression:
writeFile path (compute text) the file at path would be overwritten with an empty file if an error occurs while evaluating (compute text). With this one: writeFile path $! (compute text) the file alone when an error occurs. On Nov 17, 2007 8:04 PM, PR Stanley <[EMAIL PROTECTED]> wrote: > Hi > okay, so $! is a bit like $ i.e. the equivalent of putting > parentheses around the righthand expression. I'm still not sure of > the difference between $ and $!. Maybe it's because I don't > understand the meaning of "strict application". While we're on the > subject, what's meant by Haskell being a non-strict language? > Cheers > Paul > At 01:50 15/11/2007, you wrote: > >On 14 Nov 2007, at 4:32 PM, Shachaf Ben-Kiki wrote: > > > >>On Nov 14, 2007 4:27 PM, Justin Bailey <[EMAIL PROTECTED]> wrote: > >>>It's: > >>> > >>> f $! x = x `seq` f x > >>> > >>>That is, the argument to the right of $! is forced to evaluate, and > >>>then that value is passed to the function on the left. The function > >>>itself is not strictly evaluated (i.e., f x) I don't believe. > >> > >>Unless you mean f -- which I still don't think would do much -- it > >>wouldn't make sense to evaluate (f x) strictly. > > > >Right. (f x) evaluates f and then applies it to x. (f $! x) > >evaluates x, evaluates f, and then applies f to x. > > > >jcc > > > >_______________________________________________ > >Haskell-Cafe mailing list > >Haskell-Cafe@haskell.org > >http://www.haskell.org/mailman/listinfo/haskell-cafe > > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe >
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe