blob: 54243fe79335de02671661df2d6f5f7281509bbc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
{-# LANGUAGE MagicHash, UnboxedTuples #-}
module Main where
import GHC.Exts
import GHC.IO
main :: IO ()
main = do
marr <- newArray
loop 10000000 (unMArray marr)
where
loop :: Int -> MutableArray# RealWorld () -> IO ()
loop 0 _ = return ()
loop i marr = freezeArray marr >> loop (i-1) marr
data MArray = MArray { unMArray :: !(MutableArray# RealWorld ()) }
newArray :: IO MArray
newArray = IO $ \s -> case newArray# 16# () s of
(# s', marr# #) -> (# s', MArray marr# #)
freezeArray :: MutableArray# RealWorld () -> IO ()
freezeArray marr# = IO $ \s -> case freezeArray# marr# 0# 16# s of
(# s', _ #) -> (# s', () #)
|