module Main ( main ) where
import PrelBase
+import Addr
import ST
import IOExts
+import ST
import MutableArray
import ByteArray
-import Addr
import Int( Num(fromInt) )
+import CString (packString)
import Ratio
import Array
-- Arr# Char# -------------------------------------------
-- (main effort is in packString#)
+foreign label "stdout" addrOfStdout :: Addr
+
+stdout :: Addr
+stdout = indexAddrOffAddr addrOfStdout 0
+
test_chars :: String
test_chars
= let str = reverse "Now is the time for all good men to come to...\n"
in
unsafePerformIO (
- _ccall_ fprintf (``stdout''::Addr) "%d %s\n" (93::Int) str >>
- _ccall_ fflush (``stdout''::Addr) >>
+ _ccall_ fprintf stdout (packString "%d %s\n") (93::Int) (packString str) >>
+ _ccall_ fflush stdout >>
return ""
)
fill_in arr# 0# (size# -# 1#) >>
-- freeze the puppy:
- freezeIntArray arr#
+ freezeByteArray arr#
)
fill_in :: MutableByteArray s Int -> Int# -> Int# -> ST s ()
fill_in arr# 0# (size# -# 1#) >>
-- freeze the puppy:
- freezeAddrArray arr#
+ freezeByteArray arr#
)
fill_in :: MutableByteArray s Int -> Int# -> Int# -> ST s ()
fill_in arr# 0# (size# -# 1#) >>
-- freeze the puppy:
- freezeFloatArray arr#
+ freezeByteArray arr#
)
fill_in :: MutableByteArray s Int -> Int# -> Int# -> ST s ()
fill_in arr# 0# (size# -# 1#) >>
-- freeze the puppy:
- freezeDoubleArray arr#
+ freezeByteArray arr#
)
fill_in :: MutableByteArray s Int -> Int# -> Int# -> ST s ()
f size
= runST (
- newArray (1, size) (3 % 5) >>= \ arr# ->
+ newSTArray (1, size) (3 % 5) >>= \ arr# ->
-- don't fill in the whole thing
fill_in arr# 1 400 >>
- freezeArray arr#
+ freezeSTArray arr#
)
- fill_in :: MutableArray s Int (Ratio Int) -> Int -> Int -> ST s ()
+ fill_in :: STArray s Int (Ratio Int) -> Int -> Int -> ST s ()
fill_in arr_in# first last
= if (first > last)
then return ()
- else writeArray arr_in# first (fromInt (first * first)) >>
+ else writeSTArray arr_in# first (fromInt (first * first)) >>
fill_in arr_in# (first + 1) last
lookup_range :: Array Int (Ratio Int) -> Int -> Int -> [Ratio Int]