src/HOL/Imperative_HOL/Heap_Monad.thy
changeset 37831 fa3a2e35c4f1
parent 37828 9e1758c7ff06
child 37835 d8fdbcbde4b6
equal deleted inserted replaced
37830:01d308b00bcf 37831:fa3a2e35c4f1
   506 
   506 
   507 newSTRef = Data.STRef.newSTRef;
   507 newSTRef = Data.STRef.newSTRef;
   508 readSTRef = Data.STRef.readSTRef;
   508 readSTRef = Data.STRef.readSTRef;
   509 writeSTRef = Data.STRef.writeSTRef;
   509 writeSTRef = Data.STRef.writeSTRef;
   510 
   510 
   511 newArray :: (Int, Int) -> a -> ST s (STArray s a);
   511 newArray :: Int -> a -> ST s (STArray s a);
   512 newArray = Data.Array.ST.newArray;
   512 newArray k = Data.Array.ST.newArray (0, k);
   513 
   513 
   514 newListArray :: (Int, Int) -> [a] -> ST s (STArray s a);
   514 newListArray :: [a] -> ST s (STArray s a);
   515 newListArray = Data.Array.ST.newListArray;
   515 newListArray xs = Data.Array.ST.newListArray (0, length xs) xs;
       
   516 
       
   517 newFunArray :: Int -> (Int -> a) -> ST s (STArray s a);
       
   518 newFunArray k f = Data.Array.ST.newListArray (0, k) (map f [0..k-1]);
   516 
   519 
   517 lengthArray :: STArray s a -> ST s Int;
   520 lengthArray :: STArray s a -> ST s Int;
   518 lengthArray a = Control.Monad.liftM snd (Data.Array.ST.getBounds a);
   521 lengthArray a = Control.Monad.liftM snd (Data.Array.ST.getBounds a);
   519 
   522 
   520 readArray :: STArray s a -> Int -> ST s a;
   523 readArray :: STArray s a -> Int -> ST s a;
   532 code_const return (Haskell "return")
   535 code_const return (Haskell "return")
   533 code_const Heap_Monad.raise' (Haskell "error")
   536 code_const Heap_Monad.raise' (Haskell "error")
   534 
   537 
   535 hide_const (open) Heap heap guard raise' fold_map
   538 hide_const (open) Heap heap guard raise' fold_map
   536 
   539 
       
   540 export_code return in Haskell file "/tmp/"
       
   541 
   537 end
   542 end