ghc-7.10.0.20150123: The GHC API

Safe HaskellNone
LanguageHaskell2010

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 -> FastString Source

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 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_chars :: !Int
 
fs_bs :: !ByteString
 
fs_ref :: !(IORef (Maybe FastZString))
 

Construction

mkFastString :: String -> FastString Source

Creates a UTF-8 encoded FastString from a String

mkFastStringByteList :: [Word8] -> FastString Source

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

mkFastStringForeignPtr :: Ptr Word8 -> ForeignPtr Word8 -> Int -> IO FastString Source

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 -> String Source

Unpacks and decodes the FastString

bytesFS :: FastString -> [Word8] Source

Gives the UTF-8 encoded bytes corresponding to a FastString

Encoding

zEncodeFS :: FastString -> FastZString Source

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 -> Int Source

Returns the length of the FastString in characters

nullFS :: FastString -> Bool Source

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 -> Bool Source

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

LitStrings

Construction

Deconstruction

Operations