Contents
Part I An introduction to OCaml
Chapter 1 The core language
1.1 Basics
1.2 Data types
1.3 Functions as values
1.4 Records and variants
1.5 Imperative features
1.6 Exceptions
1.7 Symbolic processing of expressions
1.8 Pretty-printing and parsing
1.9 Standalone Caml programs
Chapter 2 The module system
2.1 Structures
2.2 Signatures
2.3 Functors
2.4 Functors and type abstraction
2.5 Modules and separate compilation
Chapter 3 Objects in Caml
3.1 Classes and objects
3.2 Immediate objects
3.3 Reference to self
3.4 Initializers
3.5 Virtual methods
3.6 Private methods
3.7 Class interfaces
3.8 Inheritance
3.9 Multiple inheritance
3.10 Parameterized classes
3.11 Polymorphic methods
3.12 Using coercions
3.13 Functional objects
3.14 Cloning objects
3.15 Recursive classes
3.16 Binary methods
3.17 Friends
Chapter 4 Labels and variants
4.1 Labels
4.1.1 Optional arguments
4.1.2 Labels and type inference
4.1.3 Suggestions for labeling
4.2 Polymorphic variants
4.2.1 Weaknesses of polymorphic variants
Chapter 5 Advanced examples with classes and modules
5.1 Extended example: bank accounts
5.2 Simple modules as classes
5.2.1 Strings
5.2.2 Hashtbl
5.2.3 Sets
5.3 The subject/observer pattern
Part II The OCaml language
Chapter 6 The OCaml language
6.1 Lexical conventions
6.2 Values
6.2.1 Base values
6.2.2 Tuples
6.2.3 Records
6.2.4 Arrays
6.2.5 Variant values
6.2.6 Polymorphic variants
6.2.7 Functions
6.2.8 Objects
6.3 Names
6.4 Type expressions
6.5 Constants
6.6 Patterns
6.7 Expressions
6.7.1 Basic expressions
6.7.2 Control structures
6.7.3 Operations on data structures
6.7.4 Operators
6.7.5 Objects
6.7.6 Coercions
6.8 Type and exception definitions
6.8.1 Type definitions
6.8.2 Exception definitions
6.9 Classes
6.9.1 Class types
6.9.2 Class expressions
6.9.3 Class definitions
6.9.4 Class specification
6.9.5 Class type definitions
6.10 Module types (module specifications)
6.10.1 Simple module types
6.10.2 Signatures
6.10.3 Functor types
6.10.4 The
with
operator
6.11 Module expressions (module implementations)
6.11.1 Simple module expressions
6.11.2 Structures
6.11.3 Functors
6.12 Compilation units
Chapter 7 Language extensions
7.1 Integer literals for types
int32
,
int64
and
nativeint
7.2 Streams and stream parsers
7.3 Recursive definitions of values
7.4 Range patterns
7.5 Assertion checking
7.6 Lazy evaluation
7.7 Local modules
7.8 Recursive modules
7.9 Private types
7.9.1 Private variant and record types
7.9.2 Private type abbreviations
7.9.3 Private row types
7.10 Local opens
7.11 Record notations
7.12 Explicit polymorphic type annotations
7.13 Explicit naming of type variables
7.14 First-class modules
7.15 Recovering the type of a module
7.16 Substituting inside a signature
7.17 Explicit overriding in class definitions
Part III The OCaml tools
Chapter 8 Batch compilation (ocamlc)
8.1 Overview of the compiler
8.2 Options
8.3 Modules and the file system
8.4 Common errors
Chapter 9 The toplevel system (ocaml)
9.1 Options
9.2 Toplevel directives
9.3 The toplevel and the module system
9.4 Common errors
9.5 Building custom toplevel systems:
ocamlmktop
9.6 Options
Chapter 10 The runtime system (ocamlrun)
10.1 Overview
10.2 Options
10.3 Dynamic loading of shared libraries
10.4 Common errors
Chapter 11 Native-code compilation (ocamlopt)
11.1 Overview of the compiler
11.2 Options
11.3 Common errors
11.4 Running executables produced by ocamlopt
11.5 Compatibility with the bytecode compiler
Chapter 12 Lexer and parser generators (ocamllex, ocamlyacc)
12.1 Overview of
ocamllex
12.1.1 Options
12.2 Syntax of lexer definitions
12.2.1 Header and trailer
12.2.2 Naming regular expressions
12.2.3 Entry points
12.2.4 Regular expressions
12.2.5 Actions
12.2.6 Variables in regular expressions
12.2.7 Reserved identifiers
12.3 Overview of
ocamlyacc
12.4 Syntax of grammar definitions
12.4.1 Header and trailer
12.4.2 Declarations
12.4.3 Rules
12.4.4 Error handling
12.5 Options
12.6 A complete example
12.7 Common errors
Chapter 13 Dependency generator (ocamldep)
13.1 Options
13.2 A typical Makefile
Chapter 14 The browser/editor (ocamlbrowser)
14.1 Invocation
14.2 Viewer
14.3 Module browsing
14.4 File editor
14.5 Shell
Chapter 15 The documentation generator (ocamldoc)
15.1 Usage
15.1.1 Invocation
15.1.2 Merging of module information
15.1.3 Coding rules
15.2 Syntax of documentation comments
15.2.1 Placement of documentation comments
15.2.2 The Stop special comment
15.2.3 Syntax of documentation comments
15.2.4 Text formatting
15.2.5 Documentation tags (@-tags)
15.3 Custom generators
15.3.1 The generator class
15.3.2 Handling custom tags
15.4 Adding command line options
15.4.1 Compilation and usage
Chapter 16 The debugger (ocamldebug)
16.1 Compiling for debugging
16.2 Invocation
16.2.1 Starting the debugger
16.2.2 Exiting the debugger
16.3 Commands
16.3.1 Getting help
16.3.2 Accessing the debugger state
16.4 Executing a program
16.4.1 Events
16.4.2 Starting the debugged program
16.4.3 Running the program
16.4.4 Time travel
16.4.5 Killing the program
16.5 Breakpoints
16.6 The call stack
16.7 Examining variable values
16.8 Controlling the debugger
16.8.1 Setting the program name and arguments
16.8.2 How programs are loaded
16.8.3 Search path for files
16.8.4 Working directory
16.8.5 Turning reverse execution on and off
16.8.6 Communication between the debugger and the program
16.8.7 Fine-tuning the debugger
16.8.8 User-defined printers
16.9 Miscellaneous commands
16.10 Running the debugger under Emacs
Chapter 17 Profiling (ocamlprof)
17.1 Compiling for profiling
17.2 Profiling an execution
17.3 Printing profiling information
17.4 Time profiling
Chapter 18 Interfacing C with OCaml
18.1 Overview and compilation information
18.1.1 Declaring primitives
18.1.2 Implementing primitives
18.1.3 Statically linking C code with Caml code
18.1.4 Dynamically linking C code with Caml code
18.1.5 Choosing between static linking and dynamic linking
18.1.6 Building standalone custom runtime systems
18.2 The
value
type
18.2.1 Integer values
18.2.2 Blocks
18.2.3 Pointers outside the heap
18.3 Representation of Caml data types
18.3.1 Atomic types
18.3.2 Tuples and records
18.3.3 Arrays
18.3.4 Concrete data types
18.3.5 Objects
18.3.6 Polymorphic variants
18.4 Operations on values
18.4.1 Kind tests
18.4.2 Operations on integers
18.4.3 Accessing blocks
18.4.4 Allocating blocks
18.4.5 Raising exceptions
18.5 Living in harmony with the garbage collector
18.5.1 Simple interface
18.5.2 Low-level interface
18.6 A complete example
18.7 Advanced topic: callbacks from C to Caml
18.7.1 Applying Caml closures from C
18.7.2 Registering Caml closures for use in C functions
18.7.3 Registering Caml exceptions for use in C functions
18.7.4 Main program in C
18.7.5 Embedding the Caml code in the C code
18.8 Advanced example with callbacks
18.9 Advanced topic: custom blocks
18.9.1 The
struct custom_operations
18.9.2 Allocating custom blocks
18.9.3 Accessing custom blocks
18.9.4 Writing custom serialization and deserialization functions
18.9.5 Choosing identifiers
18.9.6 Finalized blocks
18.10 Advanced topic: multithreading
18.10.1 Registering threads created from C
18.10.2 Parallel execution of long-running C code
18.11 Building mixed C/Caml libraries:
ocamlmklib
Part IV The OCaml library
Chapter 19 The core library
19.1 Built-in types and predefined exceptions
19.2 Module
Pervasives
: the initially opened module
Chapter 20 The standard library
Chapter 21 The unix library: Unix system calls
Chapter 22 The num library: arbitrary-precision rational arithmetic
Chapter 23 The str library: regular expressions and string processing
Chapter 24 The threads library
Chapter 25 The graphics library
Chapter 26 The dbm library: access to NDBM databases
Chapter 27 The dynlink library: dynamic loading and linking of object files
Chapter 28 The LablTk library: Tcl/Tk GUI interface
Chapter 29 The bigarray library
29.1 Module
Bigarray
: large, multi-dimensional, numerical arrays
29.2 Big arrays in the Caml-C interface
29.2.1 Include file
29.2.2 Accessing a Caml bigarray from C or Fortran
29.2.3 Wrapping a C or Fortran array as a Caml big array
Part V Appendix