<div dir="ltr">In which case, I've created a ticket to record this bug and to track its fix:<div><br></div><div><a href="https://ghc.haskell.org/trac/ghc/ticket/11193">https://ghc.haskell.org/trac/ghc/ticket/11193</a><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On 10 December 2015 at 15:26, Adam Sandberg Eriksson <span dir="ltr"><<a href="mailto:adam@sandbergericsson.se" target="_blank">adam@sandbergericsson.se</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><u></u>




<div><div>I agree that this seems to be a bug. I have a lot to do currently, but might be able to look at it sometime during next week.</div><span class="HOEnZb"><font color="#888888">
<div> </div>
<div><div>Adam Sandberg Eriksson<br></div>
</div></font></span><div><div class="h5">
<div> </div>
<div> </div>
<div>On Thu, 10 Dec 2015, at 03:34 PM, Johan Tibell wrote:<br></div>
<blockquote type="cite"><div dir="ltr">I believe this is just a bug, since the desugaring ought to be strict in the \x.<br></div>
<div><div> </div>
<div><div>On Tue, Dec 8, 2015 at 6:35 PM, Ömer Sinan Ağacan <span dir="ltr"><<a href="mailto:omeragacan@gmail.com" target="_blank">omeragacan@gmail.com</a>></span> wrote:<br></div>
<blockquote style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div>I think this is a problem/bug in the implementation. In the "function<br></div>
<div>
definitions" section of the wiki page it says the argument will have a<br></div>
<div>
bang pattern. But then this code:<br></div>
<div> </div>
<div>
    do x <- ...<br></div>
<div>
       return (x + 1)<br></div>
<div> </div>
<div>
which is just a syntactic sugar for `... >>= \x -> return (x + 1)`<br></div>
<div>
doesn't have the bang pattern in `x`.<br></div>
<div> </div>
<div>
(See also a related email I sent to ghc-devs yesterday:<br></div>
<div> <a href="https://mail.haskell.org/pipermail/ghc-devs/2015-December/010699.html" target="_blank">https://mail.haskell.org/pipermail/ghc-devs/2015-December/010699.html</a>)<br></div>
<div><div><div> </div>
<div>
2015-12-08 12:27 GMT-05:00 David Kraeutmann <<a href="mailto:kane@kane.cx" target="_blank">kane@kane.cx</a>>:<br></div>
<div>
> While there's a fundamental difference between (>>=) and let-bindings, it<br></div>
<div>
> might be worth adding to the docs that -XStrict only makes let bindings<br></div>
<div>
> strict.<br></div>
<div>
><br></div>
<div>
><br></div>
<div>
> On 12/08/2015 06:22 PM, Rob Stewart wrote:<br></div>
<div>
><br></div>
<div>
> Are the following two programs equivalent with respect to the strictness<br></div>
<div>
> of `readFile`?<br></div>
<div>
><br></div>
<div>
> --8<---------------cut here---------------start------------->8---<br></div>
<div>
> {-# LANGUAGE BangPatterns #-}<br></div>
<div>
><br></div>
<div>
> module Main where<br></div>
<div>
><br></div>
<div>
> main = do<br></div>
<div>
>   !contents <- readFile "foo.txt"<br></div>
<div>
>   print contents<br></div>
<div>
> --8<---------------cut here---------------end--------------->8---<br></div>
<div>
><br></div>
<div>
> And:<br></div>
<div>
><br></div>
<div>
> --8<---------------cut here---------------start------------->8---<br></div>
<div>
> {-# LANGAUGE Strict #-}<br></div>
<div>
><br></div>
<div>
> module Main where<br></div>
<div>
><br></div>
<div>
> main = do<br></div>
<div>
>   contents <- readFile "foo.txt"<br></div>
<div>
>   print contents<br></div>
<div>
> --8<---------------cut here---------------end--------------->8---<br></div>
<div>
><br></div>
<div>
> The documentation on "Strict-by-default pattern bindings" gives<br></div>
<div>
> let/where binding as an example, but there is not a monadic bind example.<br></div>
<div>
> <a href="http://downloads.haskell.org/~ghc/master/users-guide/glasgow_exts.html#strict-by-default-pattern-bindings" target="_blank">http://downloads.haskell.org/~ghc/master/users-guide/glasgow_exts.html#strict-by-default-pattern-bindings</a><br></div>
<div>
><br></div>
<div>
> Inspecting GHC Core for these two programs suggests that<br></div>
<div>
><br></div>
<div>
> !contents <- readFile "foo.txt"<br></div>
<div>
><br></div>
<div>
> is not equivalent to (with Strict enabled):<br></div>
<div>
><br></div>
<div>
> contents <- readFile "foo.txt"<br></div>
<div>
><br></div>
<div>
> Here's core using BangPatterns:<br></div>
<div>
><br></div>
<div>
> (readFile (unpackCString# "foo.txt"#))<br></div>
<div>
> (\ (contents_asg :: String) -><br></div>
<div>
>    case contents_asg of contents1_Xsk { __DEFAULT -><br></div>
<div>
>    print @ String $dShow_rYy contents1_Xsk<br></div>
<div>
>    })<br></div>
<div>
><br></div>
<div>
> Here's core using Strict:<br></div>
<div>
><br></div>
<div>
> (readFile (unpackCString# "foo.txt"#))<br></div>
<div>
> (\ (contents_asg :: String) -><br></div>
<div>
>    print @ String $dShow_rYv contents_asg)<br></div>
<div>
><br></div>
<div>
> Does this core align with the design of the Strict extension?<br></div>
<div>
><br></div>
<div>
> If it does, are users going to understand that using Strict is going to<br></div>
<div>
> make let/where bindings strict, but is not going to make <- or >>=<br></div>
<div>
> bindings strict?<br></div>
<div>
><br></div>
<div>
> --<br></div>
<div>
> Rob Stewart<br></div>
<div>
><br></div>
<div>
><br></div>
<div>
> _______________________________________________<br></div>
<div>
> ghc-devs mailing list<br></div>
<div>
> <a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a><br></div>
<div>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a><br></div>
<div>
><br></div>
<div>
><br></div>
<div>
><br></div>
<div>
> _______________________________________________<br></div>
<div>
> ghc-devs mailing list<br></div>
<div>
> <a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a><br></div>
<div>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a><br></div>
<div>
><br></div>
<div>
_______________________________________________<br></div>
<div>
ghc-devs mailing list<br></div>
<div> <a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a><br></div>
<div> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a><br></div>
</div>
</div>
</blockquote></div>
</div>
<div><u>_______________________________________________</u><br></div>
<div>ghc-devs mailing list<br></div>
<div><a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a><br></div>
<div><a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a><br></div>
</blockquote><div> </div>
</div></div></div>

<br>_______________________________________________<br>
ghc-devs mailing list<br>
<a href="mailto:ghc-devs@haskell.org">ghc-devs@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a><br>
<br></blockquote></div><br></div>