X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=GHC%2FPack.lhs;h=14ac670773367b75e1c408a86f8a969752962526;hb=be2750a0a11b919fb03cc070074e430f88bdfa90;hp=54899688460eefa0fd562c991014ee5e5830b5e2;hpb=b7d05c7e6906102bbc4ffe5d33ec555c4e46c2dc;p=ghc-base.git diff --git a/GHC/Pack.lhs b/GHC/Pack.lhs index 5489968..14ac670 100644 --- a/GHC/Pack.lhs +++ b/GHC/Pack.lhs @@ -1,5 +1,7 @@ \begin{code} -{-# OPTIONS_GHC -fno-implicit-prelude #-} +{-# LANGUAGE NoImplicitPrelude, MagicHash, UnboxedTuples #-} +{-# OPTIONS_HADDOCK hide #-} + ----------------------------------------------------------------------------- -- | -- Module : GHC.Pack @@ -22,33 +24,31 @@ -- #hide module GHC.Pack ( - -- (**) - emitted by compiler. - - packCString#, -- :: [Char] -> ByteArray# (**) - unpackCString, - unpackCString#, -- :: Addr# -> [Char] (**) - unpackNBytes#, -- :: Addr# -> Int# -> [Char] (**) - unpackFoldrCString#, -- (**) - unpackAppendCString#, -- (**) + -- (**) - emitted by compiler. + + packCString#, -- :: [Char] -> ByteArray# (**) + unpackCString, + unpackCString#, -- :: Addr# -> [Char] (**) + unpackNBytes#, -- :: Addr# -> Int# -> [Char] (**) + unpackFoldrCString#, -- (**) + unpackAppendCString#, -- (**) ) - where + where import GHC.Base -import GHC.Err ( error ) import GHC.List ( length ) import GHC.ST -import GHC.Num import GHC.Ptr -data ByteArray ix = ByteArray ix ix ByteArray# +data ByteArray ix = ByteArray ix ix ByteArray# data MutableByteArray s ix = MutableByteArray ix ix (MutableByteArray# s) unpackCString :: Ptr a -> [Char] unpackCString a@(Ptr addr) | a == nullPtr = [] - | otherwise = unpackCString# addr + | otherwise = unpackCString# addr -packCString# :: [Char] -> ByteArray# +packCString# :: [Char] -> ByteArray# packCString# str = case (packString str) of { ByteArray _ _ bytes -> bytes } packString :: [Char] -> ByteArray Int @@ -77,23 +77,23 @@ packNBytesST (I# length#) str = return () fill_in arr_in# idx (C# c : cs) = - write_ps_array arr_in# idx c >> + write_ps_array arr_in# idx c >> fill_in arr_in# (idx +# 1#) cs -- (Very :-) ``Specialised'' versions of some CharArray things... -new_ps_array :: Int# -> ST s (MutableByteArray s Int) -write_ps_array :: MutableByteArray s Int -> Int# -> Char# -> ST s () +new_ps_array :: Int# -> ST s (MutableByteArray s Int) +write_ps_array :: MutableByteArray s Int -> Int# -> Char# -> ST s () freeze_ps_array :: MutableByteArray s Int -> Int# -> ST s (ByteArray Int) new_ps_array size = ST $ \ s -> - case (newByteArray# size s) of { (# s2#, barr# #) -> + case (newByteArray# size s) of { (# s2#, barr# #) -> (# s2#, MutableByteArray bot bot barr# #) } where bot = error "new_ps_array" write_ps_array (MutableByteArray _ _ barr#) n ch = ST $ \ s# -> - case writeCharArray# barr# n ch s# of { s2# -> + case writeCharArray# barr# n ch s# of { s2# -> (# s2#, () #) } -- same as unsafeFreezeByteArray