{-# LANGUAGE Unsafe #-}{-# LANGUAGE NoImplicitPrelude, RoleAnnotations #-}{-# OPTIONS_GHC -funbox-strict-fields #-}{-# OPTIONS_HADDOCK not-home #-}------------------------------------------------------------------------------- |-- Module : GHC.IOArray-- Copyright : (c) The University of Glasgow 2008-- License : see libraries/base/LICENSE---- Maintainer : cvs-ghc@haskell.org-- Stability : internal-- Portability : non-portable (GHC Extensions)---- The IOArray type-------------------------------------------------------------------------------moduleGHC.IOArray(IOArray (..),newIOArray ,unsafeReadIOArray ,unsafeWriteIOArray ,readIOArray ,writeIOArray ,boundsIOArray )whereimportGHC.Base importGHC.IO importGHC.Arr -- ----------------------------------------------------------------------------- | An 'IOArray' is a mutable, boxed, non-strict array in the 'IO' monad.-- The type arguments are as follows:---- * @i@: the index type of the array (should be an instance of 'Ix')---- * @e@: the element type of the array.----newtypeIOArray i e =IOArray (STArray RealWorldi e )-- index type should have a nominal role due to Ix class. See also #9220.typeroleIOArray nominalrepresentational-- explicit instance because Haddock can't figure out a derived one-- | @since 4.1.0.0instanceEq(IOArray i e )whereIOArray STArray RealWorld i e
x == :: IOArray i e -> IOArray i e -> Bool
==IOArray STArray RealWorld i e
y =STArray RealWorld i e
x STArray RealWorld i e -> STArray RealWorld i e -> Bool
forall a. Eq a => a -> a -> Bool
==STArray RealWorld i e
y -- |Build a new 'IOArray'newIOArray ::Ix i =>(i ,i )->e ->IO(IOArray i e ){-# INLINEnewIOArray #-}newIOArray :: (i, i) -> e -> IO (IOArray i e)
newIOArray (i, i)
lu e
initial =ST RealWorld (IOArray i e) -> IO (IOArray i e)
forall a. ST RealWorld a -> IO a
stToIO (ST RealWorld (IOArray i e) -> IO (IOArray i e))
-> ST RealWorld (IOArray i e) -> IO (IOArray i e)
forall a b. (a -> b) -> a -> b
$ do{STArray RealWorld i e
marr <-(i, i) -> e -> ST RealWorld (STArray RealWorld i e)
forall i e s. Ix i => (i, i) -> e -> ST s (STArray s i e)
newSTArray (i, i)
lu e
initial ;IOArray i e -> ST RealWorld (IOArray i e)
forall (m :: * -> *) a. Monad m => a -> m a
return (STArray RealWorld i e -> IOArray i e
forall i e. STArray RealWorld i e -> IOArray i e
IOArray STArray RealWorld i e
marr )}-- | Read a value from an 'IOArray'unsafeReadIOArray ::IOArray i e ->Int->IOe {-# INLINEunsafeReadIOArray #-}unsafeReadIOArray :: IOArray i e -> Int -> IO e
unsafeReadIOArray (IOArray STArray RealWorld i e
marr )Int
i =ST RealWorld e -> IO e
forall a. ST RealWorld a -> IO a
stToIO (STArray RealWorld i e -> Int -> ST RealWorld e
forall s i e. STArray s i e -> Int -> ST s e
unsafeReadSTArray STArray RealWorld i e
marr Int
i )-- | Write a new value into an 'IOArray'unsafeWriteIOArray ::IOArray i e ->Int->e ->IO(){-# INLINEunsafeWriteIOArray #-}unsafeWriteIOArray :: IOArray i e -> Int -> e -> IO ()
unsafeWriteIOArray (IOArray STArray RealWorld i e
marr )Int
i e
e =ST RealWorld () -> IO ()
forall a. ST RealWorld a -> IO a
stToIO (STArray RealWorld i e -> Int -> e -> ST RealWorld ()
forall s i e. STArray s i e -> Int -> e -> ST s ()
unsafeWriteSTArray STArray RealWorld i e
marr Int
i e
e )-- | Read a value from an 'IOArray'readIOArray ::Ix i =>IOArray i e ->i ->IOe readIOArray :: IOArray i e -> i -> IO e
readIOArray (IOArray STArray RealWorld i e
marr )i
i =ST RealWorld e -> IO e
forall a. ST RealWorld a -> IO a
stToIO (STArray RealWorld i e -> i -> ST RealWorld e
forall i s e. Ix i => STArray s i e -> i -> ST s e
readSTArray STArray RealWorld i e
marr i
i )-- | Write a new value into an 'IOArray'writeIOArray ::Ix i =>IOArray i e ->i ->e ->IO()writeIOArray :: IOArray i e -> i -> e -> IO ()
writeIOArray (IOArray STArray RealWorld i e
marr )i
i e
e =ST RealWorld () -> IO ()
forall a. ST RealWorld a -> IO a
stToIO (STArray RealWorld i e -> i -> e -> ST RealWorld ()
forall i s e. Ix i => STArray s i e -> i -> e -> ST s ()
writeSTArray STArray RealWorld i e
marr i
i e
e ){-# INLINEboundsIOArray #-}boundsIOArray ::IOArray i e ->(i ,i )boundsIOArray :: IOArray i e -> (i, i)
boundsIOArray (IOArray STArray RealWorld i e
marr )=STArray RealWorld i e -> (i, i)
forall s i e. STArray s i e -> (i, i)
boundsSTArray STArray RealWorld i e
marr 

AltStyle によって変換されたページ (->オリジナル) /