| ghc-6.10.4: The GHC API | Contents | Index

FastString

Contents

FastStrings
  Construction
  Deconstruction
  Encoding
  Operations
  Outputing
  Internal
LitStrings
  Construction
  Deconstruction
  Operations

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

data FastString = FastString {

uniq :: !Int
n_bytes :: !Int
n_chars :: !Int
buf :: !(ForeignPtr Word8)
enc :: FSEncoding

}

fsLit :: String -> FastString
mkFastString :: String -> FastString
mkFastStringBytes :: Ptr Word8 -> Int -> FastString
mkFastStringByteList :: [Word8] -> FastString
mkFastStringForeignPtr :: Ptr Word8 -> ForeignPtr Word8 -> Int -> IO FastString
mkFastString# :: Addr# -> FastString
mkZFastString :: String -> FastString
mkZFastStringBytes :: Ptr Word8 -> Int -> FastString
unpackFS :: FastString -> String
bytesFS :: FastString -> [Word8]
isZEncoded :: FastString -> Bool
zEncodeFS :: FastString -> FastString
uniqueOfFS :: FastString -> FastInt
lengthFS :: FastString -> Int
nullFS :: FastString -> Bool
appendFS :: FastString -> FastString -> FastString
headFS :: FastString -> Char
tailFS :: FastString -> FastString
concatFS :: [FastString] -> FastString
consFS :: Char -> FastString -> FastString
nilFS :: FastString
hPutFS :: Handle -> FastString -> IO ()
getFastStringTable :: IO [[FastString]]
hasZEncoding :: FastString -> Bool
type LitString = Ptr Word8
sLit :: String -> LitString
mkLitString# :: Addr# -> LitString
mkLitString :: String -> LitString
unpackLitString :: LitString -> String
lengthLS :: LitString -> Int

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. `FastString`s support a memoized conversion to the Z-encoding via zEncodeFS.
Constructors

FastString |

uniq :: !Int |
n_bytes :: !Int |
n_chars :: !Int |
buf :: !(ForeignPtr Word8) |
enc :: FSEncoding |

Instances

Eq FastString
Ord FastString
Show FastString
Outputable FastString
Uniquable FastString
Binary FastString

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.4.2