packages feed

primitive 0.4.0.1 → 0.4.1

raw patch · 2 files changed

+64/−1 lines, 2 files

Files

+ Data/Primitive/MutVar.hs view
@@ -0,0 +1,58 @@+{-# LANGUAGE MagicHash, UnboxedTuples, DeriveDataTypeable #-}++-- |+-- Module      : Data.Primitive.MutVar+-- Copyright   : (c) Justin Bonnar 2011+-- License     : BSD-style+--+-- Maintainer  : Justin Bonnar <justinbonnar@gmail.com>+-- Portability : non-portable+-- +-- Primitive boxed mutable variables+--++module Data.Primitive.MutVar (+  MutVar(..),+  +  newMutVar,+  readMutVar,+  writeMutVar,+  +  modifyMutVar+) where++import Control.Monad.Primitive ( PrimMonad(..), primitive_ )+import GHC.Prim ( MutVar#, sameMutVar#, newMutVar#, readMutVar#, writeMutVar# )+import Data.Typeable ( Typeable )++-- | A 'MutVar' behaves like a single-element mutable array associated+-- with a primitive state token.+data MutVar s a = MutVar (MutVar# s a)+  deriving ( Typeable )++instance Eq (MutVar s a) where+  MutVar mva# == MutVar mvb# = sameMutVar# mva# mvb#++-- | Create a new 'MutVar' with the specified initial value+newMutVar :: PrimMonad m => a -> m (MutVar (PrimState m) a)+{-# INLINE newMutVar #-}+newMutVar initialValue = primitive $ \s# ->+  case newMutVar# initialValue s# of+    (# s'#, mv# #) -> (# s'#, MutVar mv# #)++-- | Read the value of a 'MutVar'+readMutVar :: PrimMonad m => MutVar (PrimState m) a -> m a+{-# INLINE readMutVar #-}+readMutVar (MutVar mv#) = primitive (readMutVar# mv#)++-- | Write a new value into a 'MutVar'+writeMutVar :: PrimMonad m => MutVar (PrimState m) a -> a -> m ()+{-# INLINE writeMutVar #-}+writeMutVar (MutVar mv#) newValue = primitive_ (writeMutVar# mv# newValue)++-- | Mutate the contents of a 'MutVar' +modifyMutVar :: PrimMonad m => MutVar (PrimState m) a -> (a -> a) -> m ()+{-# INLINE modifyMutVar #-}+modifyMutVar (MutVar mv#) g = primitive_ $ \s# ->+  case readMutVar# mv# s# of+    (# s'#, a #) -> writeMutVar# mv# (g a) s'#
primitive.cabal view
@@ -1,5 +1,5 @@ Name:           primitive-Version:        0.4.0.1+Version:        0.4.1 License:        BSD3 License-File:   LICENSE Author:         Roman Leshchinskiy <rl@cse.unsw.edu.au>@@ -13,6 +13,10 @@         This package provides wrappers for primitive array operations from         GHC.Prim.         .+        Changes in version 0.4.1+        .+        * New module "Data.Primitive.MutVar"+        .         Changes in version 0.4.0.1         .         * Critical bug fix in @fillByteArray@@@ -47,6 +51,7 @@         Data.Primitive.Array         Data.Primitive.ByteArray         Data.Primitive.Addr+        Data.Primitive.MutVar    Other-Modules:         Data.Primitive.Internal.Compat