Representations of some basic types

A fixed-precision integer type with at least the range [-2^29 .. 2^29-1].
The exact range for a given implementation can be determined by using
Prelude.minBound and Prelude.maxBound from the Prelude.Bounded class.

The character type Char is an enumeration whose values represent
Unicode (or equivalently ISO/IEC 10646) characters
(see http://www.unicode.org/ for details).
This set extends the ISO 8859-1 (Latin-1) character set
(the first 256 charachers), which is itself an extension of the ASCII
character set (the first 128 characters).
A character literal in Haskell has type Char.

To convert a Char to or from the corresponding Int value defined
by Unicode, use Prelude.toEnum and Prelude.fromEnum from the
Prelude.Enum class respectively (or equivalently ord and chr).

A value of type Ptr a represents a pointer to an object, or an
array of objects, which may be marshalled to or from Haskell values
of type a.

The type a will often be an instance of class
Foreign.Storable.Storable which provides the marshalling operations.
However this is not essential, and you can provide your own operations
to access the pointer. For example you might write small foreign
functions to get or set the fields of a C struct.

Ids with special behaviour

The call '(inline f)' reduces to f, but inline has a BuiltInRule
that tries to inline f (if it has an unfolding) unconditionally
The NOINLINE pragma arranges that inline only gets inlined (and
hence eliminated) late in compilation, after the rule has had
a good chance to fire.

Transform comprehensions

The Down type allows you to reverse sort order conveniently. A value of type
Down a contains a value of type a (represented as Down a).
If a has an Ord instance associated with it then comparing two
values thus wrapped will give you the opposite of their normal sort order.
This is particularly useful when sorting in generalised list comprehensions,
as in: then sortWith by Down x

The groupWith function uses the user supplied function which
projects an element out of every list element in order to to first sort the
input list and then to form groups by equality on these projected elements