|
|
|
|
|
Description |
There are two principal string types used internally by GHC:
FastString:
* A compact, hash-consed, representation of character strings.
* Comparison is O(1), and you can get a Unique.Unique from them.
* Generated by fsLit.
* Turn into Outputable.SDoc with Outputable.ftext.
LitString:
* Just a wrapper for the Addr# of a C string (Ptr CChar).
* Practically no operations.
* Outputing them is fast.
* Generated by sLit.
* Turn into Outputable.SDoc with Outputable.ptext
Use LitString unless you want the facilities of FastString.
|
|
Synopsis |
|
|
|
|
FastStrings
|
|
data FastString |
A FastString is an array of bytes, hashed to support fast O(1)
comparison. It is also associated with a character encoding, so that
we know how to convert a FastString to the local encoding, or to the
Z-encoding used by the compiler internally.
FastStrings support a memoized conversion to the Z-encoding via zEncodeFS.
| Constructors | | Instances | |
|
|
Construction
|
|
fsLit :: String -> FastString |
|
mkFastString :: String -> FastString |
Creates a UTF-8 encoded FastString from a String
|
|
mkFastStringBytes :: Ptr Word8 -> Int -> FastString |
|
mkFastStringByteList :: [Word8] -> FastString |
Creates a FastString from a UTF-8 encoded [Word8]
|
|
mkFastStringForeignPtr :: Ptr Word8 -> ForeignPtr Word8 -> Int -> IO FastString |
Create a FastString from an existing ForeignPtr; the difference
between this and mkFastStringBytes is that we don't have to copy
the bytes if the string is new to the table.
|
|
mkFastString# :: Addr# -> FastString |
|
mkZFastString :: String -> FastString |
Creates a Z-encoded FastString from a String
|
|
mkZFastStringBytes :: Ptr Word8 -> Int -> FastString |
|
Deconstruction
|
|
unpackFS :: FastString -> String |
Unpacks and decodes the FastString
|
|
bytesFS :: FastString -> [Word8] |
|
Encoding
|
|
isZEncoded :: FastString -> Bool |
Returns True if the FastString is Z-encoded
|
|
zEncodeFS :: FastString -> FastString |
Returns a Z-encoded version of a FastString. This might be the
original, if it was already Z-encoded. The first time this
function is applied to a particular FastString, the results are
memoized.
|
|
Operations
|
|
uniqueOfFS :: FastString -> FastInt |
|
lengthFS :: FastString -> Int |
Returns the length of the FastString in characters
|
|
nullFS :: FastString -> Bool |
Returns True if the FastString is empty
|
|
appendFS :: FastString -> FastString -> FastString |
|
headFS :: FastString -> Char |
|
tailFS :: FastString -> FastString |
|
concatFS :: [FastString] -> FastString |
|
consFS :: Char -> FastString -> FastString |
|
nilFS :: FastString |
|
Outputing
|
|
hPutFS :: Handle -> FastString -> IO () |
Outputs a FastString with no decoding at all, that is, you
get the actual bytes in the FastString written to the Handle.
|
|
Internal
|
|
getFastStringTable :: IO [[FastString]] |
|
hasZEncoding :: FastString -> Bool |
Returns True if this FastString is not Z-encoded but already has
a Z-encoding cached (used in producing stats).
|
|
LitStrings
|
|
type LitString = Ptr Word8 |
|
Construction
|
|
sLit :: String -> LitString |
|
mkLitString# :: Addr# -> LitString |
|
mkLitString :: String -> LitString |
|
Deconstruction
|
|
unpackLitString :: LitString -> String |
|
Operations
|
|
lengthLS :: LitString -> Int |
|
Produced by Haddock version 2.3.0 |