úÎ' ç portable experimentalalexey.skladnoy@gmail.comNone&Mutable variable which full analog of  or  % but could use either of the monads.  Unfortunately there's no way to convert PrimRef to STRef or  IORef. /Create new mutable variable with initial value a. Read value of PrimRef. Write value to PrimRef. Modify content of PrimRef using function. Modify content of PrimRef' using function and evaluate result of C function application to WHNF before storing it in the variable.    non-portable experimentalalexey.skladnoy@gmail.comNoneBMonads in which computation based on primitive monad (instance of   9) could be embedded. Instances must obey following laws:  liftPrim . return = return 0 liftPrim (m >>= f) = liftPrim m >>= liftPrim f         monad-primitive-0.1 Data.PrimRefControl.Monad.Primitive.Class Data.IORefIORef Data.STRefSTRefPrimRef newPrimRef readPrimRef writePrimRef modifyPrimRefmodifyPrimRef' MonadPrim BasePrimMonadliftPrimprimitive-0.5.1.0Control.Monad.Primitive PrimMonad$fMonadPrimWriterT$fMonadPrimWriterT0$fMonadPrimStateT$fMonadPrimStateT0$fMonadPrimRWST$fMonadPrimRWST0$fMonadPrimReaderT$fMonadPrimMaybeT$fMonadPrimIdentityT$fMonadPrimErrorT$fMonadPrimContT $fMonadPrimST $fMonadPrimIO