
I am having hard time making sense of GHC.Conc. Is there a writeup that
describes the significance of "#", or the meaning of "primOp" and
"primType"?
Thanks
Daryoush
On Sun, Dec 7, 2008 at 11:48 PM, Don Stewart
dmehrtash:
Any idea was the atomically# mean in the following code?
atomically :: STM a -> IO a atomically (STM m) = IO (\s -> (atomically# m) s )
Code is from GHC.Conc module [1] http://www.haskell.org/ghc/docs/6.6/html/libraries/base/GHC-Conc.html
It is a primitive hook into the runtime, where transactional memory is implemented.
It is documented in the primops module in the GHC source,
$ cd ghc/compiler/prelude/
------------------------------------------------------------------------ section "STM-accessible Mutable Variables" ------------------------------------------------------------------------
primtype TVar# s a
primop AtomicallyOp "atomically#" GenPrimOp (State# RealWorld -> (# State# RealWorld, a #) ) -> State# RealWorld -> (# State# RealWorld, a #) with out_of_line = True has_side_effects = True
primop RetryOp "retry#" GenPrimOp State# RealWorld -> (# State# RealWorld, a #) with out_of_line = True has_side_effects = True
Along with other primitives like:
------------------------------------------------------------------------ section "Parallelism" ------------------------------------------------------------------------
primop ParOp "par#" GenPrimOp a -> Int# with -- Note that Par is lazy to avoid that the sparked thing -- gets evaluted strictly, which it should *not* be has_side_effects = True
-- Don