
#9390: Inlining prevents evaluation of ignored parts of unboxed tuples -------------------------------------+------------------------------------- Reporter: snoyberg | Owner: Type: bug | Status: new Priority: normal | Milestone: 7.8.4 Component: Compiler | Version: 7.8.3 Resolution: | Keywords: Operating System: Linux | Architecture: x86_64 (amd64) Type of failure: Incorrect | Difficulty: Unknown result at runtime | Blocked By: Test Case: | Related Tickets: Blocking: | Differential Revisions: | -------------------------------------+------------------------------------- Comment (by snoyberg): I think you were implying this, but just for complete clarity (and since I'd want to include it in an explanatory document), when we have: {{{ x `seq` (y :: IO a) }}} We have no control of whether `x` or `y` will be evaluated first, and therefore there is no ordering of side effects from the evaluation of `x` and `y`. However, the IO action contained by `y` *will* be guaranteed to be run after both `x` and `y` are evaluated. In other words, with the code: {{{ let x = unsafePerformIO $ putStrLn "x evaluated" y = unsafePerformIO $ do putStrLn "y evaluated" return $ "y run" x `seq` y }} The ordering of "x evaluated" and "y evaluated" is undefined, but we are guaranteed that both of them will be print before "y run". -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9390#comment:15 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler