
#8326: Place heap checks common in case alternatives before the case -------------------------------------+------------------------------------- Reporter: jstolarek | Owner: Type: task | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.7 Resolution: | Keywords: Operating System: | Architecture: Unknown/Multiple Unknown/Multiple | Difficulty: Unknown Type of failure: | Blocked By: None/Unknown | Related Tickets: #1498 Test Case: | Blocking: 8317 | Differential Revisions: | -------------------------------------+------------------------------------- Comment (by dfeuer): I do not understand the theory here—what is the (not-yet-implemented version of) `isTrue#` supposed to accomplish? If I hand it `12#`, it will dutifully tell me `False`. What exactly have I learned from that? Either I meant for it to return `True` and I just got a wrong answer or I just used a very confusingly-named function to see if something equals `1#`. I could fake C-style booleans if I wanted using `isFalse`, but it would be much clearer to just explicitly compare something to zero. If you wanted to actually get some kind of safety, you'd need something more invasive, with more potential to slow things down, like maybe {{{#!hs isTrue# x | tagToEnum# ((x `orI#` 1#) ==# 1#) = tagToEnum# x | otherwise = error "Oops" }}} I just don't see how the proposed `isTrue#` offers any real advantage over `tagToEnum#`. Using primops is always playing with fire, and something that looks like a safety net but really isn't just invites careless errors. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/8326#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler