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