ghc-7.8.20140130: The GHC API

Safe HaskellNone
LanguageHaskell98

FastString

Contents

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 from them. * Generated by fsLit. * Turn into SDoc with 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 SDoc with ptext

Use LitString unless you want the facilities of FastString.

Synopsis

ByteString

mkFastStringByteString :: ByteString -> IO FastStringSource

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.

FastZString

FastStrings

data FastStringSource

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

FastString 

Fields

uniq :: !Int
 
n_chars :: !Int
 
fs_bs :: !ByteString
 
fs_ref :: !(IORef (Maybe FastZString))
 

Construction

mkFastString :: String -> FastStringSource

Creates a UTF-8 encoded FastString from a String

mkFastStringByteList :: [Word8] -> FastStringSource

Creates a FastString from a UTF-8 encoded [Word8]

mkFastStringForeignPtr :: Ptr Word8 -> ForeignPtr Word8 -> Int -> IO FastStringSource

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.

Deconstruction

unpackFS :: FastString -> StringSource

Unpacks and decodes the FastString

bytesFS :: FastString -> [Word8]Source

Gives the UTF-8 encoded bytes corresponding to a FastString

Encoding

zEncodeFS :: FastString -> FastZStringSource

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

lengthFS :: FastString -> IntSource

Returns the length of the FastString in characters

nullFS :: FastString -> BoolSource

Returns True if the FastString is empty

Outputing

hPutFS :: Handle -> FastString -> IO ()Source

Outputs a FastString with no decoding at all, that is, you get the actual bytes in the FastString written to the Handle.

Internal

hasZEncoding :: FastString -> BoolSource

Returns True if this FastString is not Z-encoded but already has a Z-encoding cached (used in producing stats).

LitStrings

Construction

Deconstruction

Operations