ghc-7.4.1: The GHC API

Safe HaskellSafe-Infered

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

FastStrings

data FastString Source

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_bytes :: !Int
 
n_chars :: !Int
 
buf :: !(ForeignPtr Word8)
 
enc :: FSEncoding
 

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.

mkZFastString :: String -> FastStringSource

Creates a Z-encoded FastString from a String

Deconstruction

unpackFS :: FastString -> StringSource

Unpacks and decodes the FastString

bytesFS :: FastString -> [Word8]Source

Gives the UTF-8 encoded bytes corresponding to a FastString

Encoding

isZEncoded :: FastString -> BoolSource

Returns True if the FastString is Z-encoded

zEncodeFS :: FastString -> FastStringSource

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