git.fiddlerwoaroof.com
progs/prelude/PreludeArrayPrims.hi
4e987026
 -- These primitives are used to implement arrays with constant time
 -- access.  There are destructive update routines for arrays for use
 -- internally in functions such as array.  These are impure but are
 -- marked as pure to keep them out of the top level monad.  This should
 -- be redone using lambda-var someday.
 
 interface PreludeBltinArray where
 
 
 data Vector a    -- Used to represent vectors with delayed components
 data Delay a     -- An explicit represenation of a delayed object
 
 
 -- Primitive vectors now always have strict components.  This permits us
 -- to treat array indexing as an atomic operation without the explicit
 -- force on access.
 
 primVectorSel :: Vector a -> Int -> a
 primVectorUpdate :: Vector a -> Int -> a -> a
 primMakeVector :: Int -> a -> Vector a
 primCopyVector :: Vector a -> Vector a
 
 -- These functions are used for explicit sequencing of destructive ops
 
 strict1 :: a -> b -> b
 primForce :: Delay a -> a
 
 {-#
 primVectorSel ::  LispName("prim.vector-sel"), Complexity(1)
 primVectorUpdate :: LispName("prim.vector-update"), Complexity(1)
 primMakeVector :: LispName("prim.make-vector"), Complexity(4)
 primCopyVector :: LispName("prim.copy-vector"), Complexity(5)
 strict1 :: Strictness("S,N"),
 	   LispName("prim.strict1")
 primForce :: LispName("prim.force")
 #-}