home *** CD-ROM | disk | FTP | other *** search
- ------------------------------------------------------------------------------
- -- This file contains a Gofer implementation of the monadic array
- -- primitives for Lazy state threads, as described in the PLDI '94
- -- paper by John Launchbury and Simon Peyton Jones, using new Gofer
- -- primitives added in Gofer 2.30.
- --
- -- This file must be loaded only after both array.gs and iomonad.gs,
- -- and requires the standard, or cc prelude.
- --
- -- You will not be able to use this file unless the version of Gofer that
- -- is installed on your machine has been compiled with the IO_MONAD flag
- -- and the HASKELL_ARRAYS flag set to 1.
- --
- -- Mark P Jones, 1994
- ------------------------------------------------------------------------------
-
- module LazyStateArr( newArr, readArr, writeArr, freezeArr ) where
-
- primitive primSTNewArr "primSTNewArr"
- :: (a -> Int) -> (a,a) -> b -> ST s (MutArr s a b)
- primitive primSTReadArr "primSTReadArr"
- :: ((a,a) -> a -> Int) -> MutArr s a b -> a -> ST s b
- primitive primSTWriteArr "primSTWriteArr"
- :: ((a,a) -> a -> Int) -> MutArr s a b -> a -> b -> ST s ()
- primitive primSTFreeze "primSTFreeze"
- :: MutArr s a b -> ST s (Array a b)
-
- newArr :: Ix a => (a,a) -> b -> ST s (MutArr s a b)
- newArr bounds = primSTNewArr (index bounds) bounds
-
- readArr :: Ix a => MutArr s a b -> a -> ST s b
- readArr = primSTReadArr index
-
- writeArr :: Ix a => MutArr s a b -> a -> b -> ST s ()
- writeArr = primSTWriteArr index
-
- freezeArr :: Ix a => MutArr s a b -> ST s (Array a b)
- freezeArr = primSTFreeze
-
- ------------------------------------------------------------------------------
-