
#10867: Primop types should not mention () -------------------------------------+------------------------------------- Reporter: simonpj | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.10.2 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: -------------------------------------+------------------------------------- Comment (by simonpj): OK, talked to Simon. My "I believe the following.." is false. In fact all those finalisers are packed into an array in `Weak.c` (function `scheduleFinalizers`) and handed off to the Haskell function `GHC.Weak.runFinalizerBatch`. So the latter certainly needs to know the type of the finaliser. With that in mind, I think we should not change the `Weak#` type (as I wrongly proposed above) but instead change the type of `mkWeak#` to {{{ primop MkWeakOp "mkWeak#" GenPrimOp key -> value -> (State# RealWorld -> State# RealWorld) -> (# State# RealWorld, Weak# b #) }}} and `GHC.Weak.runFinalizerBatch` to {{{ runFinalizerBatch :: Int -> Array# (State# RealWorld -> State# RealWorld) -> IO () }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10867#comment:12 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler