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 _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe