
#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 simonmar): The RTS refers to lots of things that are defined in Haskell, incidentally, not just in primops. The full list is in `rts/Prelude.h`. But you can change these primops if necessary. You probably didn't find the implementations because they're Z-encoded; `finalizeWeak#` is `stg_finalizzeWeakzh` in `rts/PrimOps.h`. It returns the finalizer of a weak pointer, which has type `State# RealWorld -> (# State# RealWorld, () #)`, but you could always lie and give it a more general type. The wrapper in `GHC.Weak` will probably work unchanged. We already lie in the type of `mkWeak#` in a similar way, for reasons I forget. It looks like `check#` has the wrong type anyway, its implementation returns `()` (ie. zero return values in Cmm), so its Haskell type should have a return type of `State# RealWorld`. Feel free to change its name at the same time, I agree it's a silly name! When changing this you'll need to run the tests in the stm package, which I think aren't run by default. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10867#comment:9 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler