add finalizeForeignPtr
[haskell-report.git] / report / standard-prelude.verb
1 %
2 % $Header: /home/cvs/root/haskell-report/report/standard-prelude.verb,v 1.4 2002/12/10 11:51:11 simonpj Exp $
3 %
4 %**<title>The Haskell 98 Report: Standard Prelude</title>
5 %**~header
6 %*anchor on
7 \section{Standard Prelude}
8 \label{stdprelude}
9
10 In this chapter the entire \Haskell{} Prelude is given.  It constitutes
11 a {\em specification} for the Prelude.  Many of the definitions are
12 written with clarity rather than efficiency in mind, 
13 and it is not required that the specification be implemented as shown here.
14
15 The default method definitions, given with @class@ declarations, constitute
16 a specification {\em only} of the default method.  They do not constitute a
17 specification of the meaning of the method in all instances.  To take
18 one particular example, the default method for @enumFrom@ in class @Enum@
19 will not work properly for types whose range exceeds that of @Int@ (because
20 @fromEnum@ cannot map all values in the type to distinct @Int@ values).
21
22 The Prelude shown here is organized into a root module, @Prelude@,
23 and three sub-modules, @PreludeList@, @PreludeText@, and @PreludeIO@.
24 This structure is purely presentational.
25 An implementation is not required to use 
26 this organisation for the Prelude,
27 nor are these three modules available for import separately.
28 Only the exports of module @Prelude@ are significant.
29
30 Some of these modules import Library modules, such as @Data.Char@, @Control.Monad@, @System.IO@,
31 and @Numeric@.  These modules are described fully in Part~\ref{libraries}.
32 These imports are not, of course, part of the specification
33 of the @Prelude@.  That is, an implementation is free to import more, or less,
34 of the Library modules, as it pleases.
35
36 Primitives that
37 are not definable in \Haskell{}, indicated by names starting with ``@prim@'', are
38 defined in a system dependent manner in module @PreludeBuiltin@ and
39 are not shown here.  Instance declarations that simply bind primitives to
40 class methods are omitted.  Some of the more verbose instances with
41 obvious functionality have been left out for the sake of brevity.
42
43 Declarations for special types such as @Integer@, or @()@ are
44 included in the Prelude for completeness even though the declaration
45 may be incomplete or syntactically invalid.  An ellipsis ``@...@'' is often
46 used in places where the remainder of a definition cannot be given in Haskell.
47
48 To reduce the occurrence of unexpected ambiguity errors, and to
49 improve efficiency, a number of commonly-used functions over lists use
50 the @Int@ type rather than using a more general numeric type, such as
51 @Integral a@ or @Num a@.  These functions are: @take@, @drop@,
52 @!!@, @length@, @splitAt@, and @replicate@.  The more general
53 versions are given in the @Data.List@ library, with the prefix
54 ``@generic@''; for example @genericLength@.
55
56 \clearpage
57 % The index entries for :, [], (), and tuples are here
58 % it just so HAPPENS that they'll end up referring to the right page
59 % HHAACCKK!!   <---- Partain, you scoundrel! -- KH
60 % Well, they aren't there anymore so I nuked them.  So there!  jcp
61 \inputHS{Prelude}\clearpage
62
63 %\subsection{Prelude {\tt PreludeBuiltin}}
64 %\label{preludebuiltin}
65 %\input{PreludeBuiltin}\clearpage
66
67
68 \subsection{Prelude \texorpdfstring{{\tt PreludeList}}{PreludeList}}
69 \label{preludelist}
70 \inputHS{PreludeList}\clearpage
71 \subsection{Prelude \texorpdfstring{{\tt PreludeText}}{PreludeText}}
72 \label{preludetext}
73 \inputHS{PreludeText}\cleardoublepage
74
75 \subsection{Prelude \texorpdfstring{{\tt PreludeIO}}{PreludeIO}}
76 \label{preludeio}
77 \inputHS{PreludeIO}
78 %**~footer
79
80