| Safe Haskell | Safe |
|---|---|
| Language | Haskell2010 |
Text.Encoding.Z
Description
The Z-encoding
This is the main name-encoding and decoding function. It encodes any string into a string that is acceptable as a C name. This is code was originally part of GHC and used right before emitting a symbol name into the compiled C or asm code. This library was created as this encoding is useful when working with GHC compiled code or generally when C-compatible name mangling is desired.
Synopsis
- zEncodeString :: UserString -> EncodedString
- zDecodeString :: EncodedString -> UserString
- type UserString = String
- type EncodedString = String
Documentation
zEncodeString :: UserString -> EncodedString Source #
The basic encoding scheme is this:
- Tuples (,,,) are coded as Z3T
- Alphabetic characters (upper and lower) and digits
all translate to themselves;
except
Z, which translates toZZandz, which translates tozzWe need both so that we can preserve the variable/tycon distinction - Most other printable characters translate to
zxorZxfor some alphabetic character x - The others translate as
znnnUwherennnis the decimal number of the character
Before After
--------------------------
Trak Trak
foo_wib foozuwib
> zg
>1 zg1
foo# foozh
foo## foozhzh
foo##1 foozhzh1
fooZ fooZZ
:+ ZCzp
() Z0T 0-tuple
(,,,,) Z5T 5-tuple
(# #) Z1H unboxed 1-tuple (note the space)
(#,,,,#) Z5H unboxed 5-tuple
(NB: There is no Z1T nor Z0H.)
zDecodeString :: EncodedString -> UserString Source #
The inverse of zEncodeString
type UserString Source #
Arguments
| = String | As the user typed it |
type EncodedString Source #
Arguments
| = String | Encoded form |