<div dir="ltr">Hi folks,<div><br></div><div>I was debugging a Core-to-Core transform for TEST=<a href="https://github.com/ghc/ghc/blob/fe04f3783b662c52c4a0ff36b2d62a7a575998a5/testsuite/tests/simplCore/should_compile/spec-inline.hs">spec-inline</a> and was wondering (yet again) why GHC produces unlifted `let` bindings in Core like <a href="https://github.com/ghc/ghc/blob/fe04f3783b662c52c4a0ff36b2d62a7a575998a5/testsuite/tests/simplCore/should_compile/spec-inline.stderr#L68-L76">it seems supposed to be doing</a>.</div><div><ul><li>Why doesn't this use `case` instead? <br></li><li>Is there a semantic difference? <br></li><li>Can `case` be used with unlifted types? <br></li><li>And if not, why can `let`?</li></ul></div><div>Unlifted `let` seems much close to `case` than to `let`. <a href="https://github.com/ghc/ghc/search?l=Haskell&q=%22strict+let%22&type=&utf8=%E2%9C%93">Some GHC passes seem to agree.</a></div><div><br></div><div>Cheers,</div><div>Sebastian</div></div>