[Haskell-cafe] What is the role of $!?
ddssff at gmail.com
Mon Dec 10 01:15:29 EST 2007
Here is a practical example I ran into a few days ago. With this
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 <prstanley at ntlworld.com> wrote:
> 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?
> 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 <jgbailey at gmail.com> wrote:
> >>> 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.
> >Haskell-Cafe mailing list
> >Haskell-Cafe at haskell.org
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Haskell-Cafe