X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=GHC%2FPack.lhs;h=14ac670773367b75e1c408a86f8a969752962526;hb=be2750a0a11b919fb03cc070074e430f88bdfa90;hp=d63b4e0040ee9af59ff8741a04e6e594bf087a6f;hpb=b706340c451952adf230b5b8daecad8a1f34d714;p=ghc-base.git diff --git a/GHC/Pack.lhs b/GHC/Pack.lhs index d63b4e0..14ac670 100644 --- a/GHC/Pack.lhs +++ b/GHC/Pack.lhs @@ -1,5 +1,7 @@ \begin{code} -{-# OPTIONS -fno-implicit-prelude #-} +{-# LANGUAGE NoImplicitPrelude, MagicHash, UnboxedTuples #-} +{-# OPTIONS_HADDOCK hide #-} + ----------------------------------------------------------------------------- -- | -- Module : GHC.Pack @@ -19,35 +21,34 @@ -- ----------------------------------------------------------------------------- +-- #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 {-# SOURCE #-} 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 @@ -76,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