
#15349: fixST is a bit wrong -------------------------------------+------------------------------------- Reporter: dfeuer | Owner: dfeuer Type: bug | Status: new Priority: normal | Milestone: 8.6.1 Component: Core Libraries | Version: 8.5 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Incorrect result | Unknown/Multiple at runtime | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by dfeuer): Replying to [comment:1 simonmar]:
Wow, good catch. I suppose we should do what `fixIO` does, since this is clearly wrong. But maybe there's a way to do it with `IORef` that would be cheaper than `MVar`? (we'd need benchmarks to check, though)
I don't think there is. I believe that runs into the same problem as `unsafeFixIO`: trouble with multiple threads. In `fixST f`, `f` may spark computations (`runEval`, `runPar`, etc.) that demand the final result; those should block until the result is available. Just like `fixIO`, what we really want here is an `IVar`, and we don't (yet?) have those natively. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/15349#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler