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
dmehrtash:
> Any idea was the atomically# mean in the following code?> [1]http://www.haskell.org/ghc/docs/6.6/html/libraries/base/GHC-Conc.html
>
> atomically :: STM a -> IO a
> atomically (STM m) = IO (\s -> (atomically# m) s )
>
> Code is from GHC.Conc module
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