The Glorious Glasgow Haskell Compilation System User's Guide, Version 7.0.1

The GHC Team


Table of Contents

The Glasgow Haskell Compiler License
1. Introduction to GHC
1.1. Obtaining GHC
1.2. Meta-information: Web sites, mailing lists, etc.
1.3. Reporting bugs in GHC
1.4. GHC version numbering policy
1.5. Release notes for version 7.0.1
1.5.1. Highlights
1.5.2. Language changes
1.5.3. Warnings
1.5.4. DLLs
1.5.5. Runtime system
1.5.6. Compiler
1.5.7. GHCi
1.5.8. Template Haskell and Quasi-Quoters
1.5.9. GHC API
1.5.10. Libraries
1.5.10.1. array
1.5.10.2. base
1.5.10.3. base 3 compat
1.5.10.4. bin-package-db
1.5.10.5. bytestring
1.5.10.6. Cabal
1.5.10.7. containers
1.5.10.8. directory
1.5.10.9. dph (dph-base, dph-par, dph-prim-interface, dph-prim-par, dph-prim-seq, dph-seq)
1.5.10.10. extensible-exceptions
1.5.10.11. filepath
1.5.10.12. ghc-binary
1.5.10.13. ghc-prim
1.5.10.14. haskell98
1.5.10.15. haskell2010
1.5.10.16. hpc
1.5.10.17. integer-gmp
1.5.10.18. old-locale
1.5.10.19. old-time
1.5.10.20. pretty
1.5.10.21. process
1.5.10.22. random
1.5.10.23. syb
1.5.10.24. template-haskell
1.5.10.25. time
1.5.10.26. unix
2. Using GHCi
2.1. Introduction to GHCi
2.2. Loading source files
2.2.1. Modules vs. filenames
2.2.2. Making changes and recompilation
2.3. Loading compiled code
2.4. Interactive evaluation at the prompt
2.4.1. I/O actions at the prompt
2.4.2. Using do-notation at the prompt
2.4.3. What's really in scope at the prompt?
2.4.3.1. :module and :load
2.4.3.2. Qualified names
2.4.3.3. The :main and :run commands
2.4.4. The it variable
2.4.5. Type defaulting in GHCi
2.5. The GHCi Debugger
2.5.1. Breakpoints and inspecting variables
2.5.1.1. Setting breakpoints
2.5.1.2. Listing and deleting breakpoints
2.5.2. Single-stepping
2.5.3. Nested breakpoints
2.5.4. The _result variable
2.5.5. Tracing and history
2.5.6. Debugging exceptions
2.5.7. Example: inspecting functions
2.5.8. Limitations
2.6. Invoking GHCi
2.6.1. Packages
2.6.2. Extra libraries
2.7. GHCi commands
2.8. The :set command
2.8.1. GHCi options
2.8.2. Setting GHC command-line options in GHCi
2.9. The .ghci file
2.10. Compiling to object code inside GHCi
2.11. FAQ and Things To Watch Out For
3. Using runghc
3.1. Flags
4. Using GHC
4.1. Getting started: compiling programs
4.2. Options overview
4.2.1. Command-line arguments
4.2.2. Command line options in source files
4.2.3. Setting options in GHCi
4.3. Static, Dynamic, and Mode options
4.4. Meaningful file suffixes
4.5. Modes of operation
4.5.1. Using ghc ––make
4.5.2. Expression evaluation mode
4.5.3. Batch compiler mode
4.5.3.1. Overriding the default behaviour for a file
4.6. Help and verbosity options
4.7. Filenames and separate compilation
4.7.1. Haskell source files
4.7.2. Output files
4.7.3. The search path
4.7.4. Redirecting the compilation output(s)
4.7.5. Keeping Intermediate Files
4.7.6. Redirecting temporary files
4.7.7. Other options related to interface files
4.7.8. The recompilation checker
4.7.9. How to compile mutually recursive modules
4.7.10. Using make
4.7.11. Dependency generation
4.7.12. Orphan modules and instance declarations
4.8. Warnings and sanity-checking
4.9. Packages
4.9.1. Using Packages
4.9.2. The main package
4.9.3. Consequences of packages for the Haskell language
4.9.4. Package Databases
4.9.4.1. The GHC_PACKAGE_PATH environment variable
4.9.5. Package IDs, dependencies, and broken packages
4.9.6. Package management (the ghc-pkg command)
4.9.7. Building a package from Haskell source
4.9.8. InstalledPackageInfo: a package specification
4.10. Optimisation (code improvement)
4.10.1. -O*: convenient “packages” of optimisation flags.
4.10.2. -f*: platform-independent flags
4.11. Options related to a particular phase
4.11.1. Replacing the program for one or more phases
4.11.2. Forcing options to a particular phase
4.11.3. Options affecting the C pre-processor
4.11.3.1. CPP and string gaps
4.11.4. Options affecting a Haskell pre-processor
4.11.5. Options affecting code generation
4.11.6. Options affecting linking
4.12. Using shared libraries
4.12.1. Building programs that use shared libraries
4.12.2. Shared libraries for Haskell packages
4.12.3. Shared libraries that export a C API
4.12.4. Finding shared libraries at runtime
4.13. Using Concurrent Haskell
4.14. Using SMP parallelism
4.14.1. Compile-time options for SMP parallelism
4.14.2. RTS options for SMP parallelism
4.14.3. Hints for using SMP parallelism
4.15. Platform-specific Flags
4.16. Running a compiled program
4.16.1. Setting global RTS options
4.16.2. Miscellaneous RTS options
4.16.3. RTS options to control the garbage collector
4.16.4. RTS options for concurrency and parallelism
4.16.5. RTS options for profiling
4.16.6. Tracing
4.16.7. RTS options for hackers, debuggers, and over-interested souls
4.16.8. Linker flags to change RTS behaviour
4.16.9. “Hooks” to change RTS behaviour
4.16.10. Getting information about the RTS
4.17. Generating and compiling External Core Files
4.18. Debugging the compiler
4.18.1. Dumping out compiler intermediate structures
4.18.2. Checking for consistency
4.18.3. How to read Core syntax (from some -ddump flags)
4.18.4. Unregisterised compilation
4.19. Flag reference
4.19.1. Help and verbosity options
4.19.2. Which phases to run
4.19.3. Alternative modes of operation
4.19.4. Redirecting output
4.19.5. Keeping intermediate files
4.19.6. Temporary files
4.19.7. Finding imports
4.19.8. Interface file options
4.19.9. Recompilation checking
4.19.10. Interactive-mode options
4.19.11. Packages
4.19.12. Language options
4.19.13. Warnings
4.19.14. Optimisation levels
4.19.15. Individual optimisations
4.19.16. Profiling options
4.19.17. Program coverage options
4.19.18. Haskell pre-processor options
4.19.19. C pre-processor options
4.19.20. Code generation options
4.19.21. Linking options
4.19.22. Replacing phases
4.19.23. Forcing options to particular phases
4.19.24. Platform-specific options
4.19.25. External core file options
4.19.26. Compiler debugging options
4.19.27. Misc compiler options
5. Profiling
5.1. Cost centres and cost-centre stacks
5.1.1. Inserting cost centres by hand
5.1.2. Rules for attributing costs
5.2. Compiler options for profiling
5.3. Time and allocation profiling
5.4. Profiling memory usage
5.4.1. RTS options for heap profiling
5.4.2. Retainer Profiling
5.4.2.1. Hints for using retainer profiling
5.4.3. Biographical Profiling
5.4.4. Actual memory residency
5.5. hp2ps––heap profile to PostScript
5.5.1. Manipulating the hp file
5.5.2. Zooming in on regions of your profile
5.5.3. Viewing the heap profile of a running program
5.5.4. Viewing a heap profile in real time
5.6. Observing Code Coverage
5.6.1. A small example: Reciprocation
5.6.2. Options for instrumenting code for coverage
5.6.3. The hpc toolkit
5.6.3.1. hpc report
5.6.3.2. hpc markup
5.6.3.3. hpc sum
5.6.3.4. hpc combine
5.6.3.5. hpc map
5.6.3.6. hpc overlay and hpc draft
5.6.4. Caveats and Shortcomings of Haskell Program Coverage
5.7. Using “ticky-ticky” profiling (for implementors)
6. Advice on: sooner, faster, smaller, thriftier
6.1. Sooner: producing a program more quickly
6.2. Faster: producing a program that runs quicker
6.3. Smaller: producing a program that is smaller
6.4. Thriftier: producing a program that gobbles less heap space
7. GHC Language Features
7.1. Language options
7.2. Unboxed types and primitive operations
7.2.1. Unboxed types
7.2.2. Unboxed Tuples
7.3. Syntactic extensions
7.3.1. Unicode syntax
7.3.2. The magic hash
7.3.3. New qualified operator syntax
7.3.4. Hierarchical Modules
7.3.5. Pattern guards
7.3.6. View patterns
7.3.7. n+k patterns
7.3.8. The recursive do-notation
7.3.8.1. Details of recursive do-notation
7.3.8.2. Mdo-notation (deprecated)
7.3.9. Parallel List Comprehensions
7.3.10. Generalised (SQL-Like) List Comprehensions
7.3.11. Rebindable syntax and the implicit Prelude import
7.3.12. Postfix operators
7.3.13. Tuple sections
7.3.14. Record field disambiguation
7.3.15. Record puns
7.3.16. Record wildcards
7.3.17. Local Fixity Declarations
7.3.18. Package-qualified imports
7.3.19. Summary of stolen syntax
7.4. Extensions to data types and type synonyms
7.4.1. Data types with no constructors
7.4.2. Data type contexts
7.4.3. Infix type constructors, classes, and type variables
7.4.4. Liberalised type synonyms
7.4.5. Existentially quantified data constructors
7.4.5.1. Why existential?
7.4.5.2. Existentials and type classes
7.4.5.3. Record Constructors
7.4.5.4. Restrictions
7.4.6. Declaring data types with explicit constructor signatures
7.4.7. Generalised Algebraic Data Types (GADTs)
7.5. Extensions to the "deriving" mechanism
7.5.1. Inferred context for deriving clauses
7.5.2. Stand-alone deriving declarations
7.5.3. Deriving clause for extra classes (Typeable, Data, etc)
7.5.4. Generalised derived instances for newtypes
7.5.4.1. Generalising the deriving clause
7.5.4.2. A more precise specification
7.6. Class and instances declarations
7.6.1. Class declarations
7.6.1.1. Multi-parameter type classes
7.6.1.2. The superclasses of a class declaration
7.6.1.3. Class method types
7.6.2. Functional dependencies
7.6.2.1. Rules for functional dependencies
7.6.2.2. Background on functional dependencies
7.6.3. Instance declarations
7.6.3.1. Relaxed rules for the instance head
7.6.3.2. Relaxed rules for instance contexts
7.6.3.3. Undecidable instances
7.6.3.4. Overlapping instances
7.6.4. Overloaded string literals
7.7. Type families
7.7.1. Data families
7.7.1.1. Data family declarations
7.7.1.2. Data instance declarations
7.7.1.3. Import and export
7.7.2. Synonym families
7.7.2.1. Type family declarations
7.7.2.2. Type instance declarations
7.7.2.3. Equality constraints
7.7.2.4. Type families and instance declarations
7.8. Other type system extensions
7.8.1. Explicit universal quantification (forall)
7.8.2. The context of a type signature
7.8.3. Implicit parameters
7.8.3.1. Implicit-parameter type constraints
7.8.3.2. Implicit-parameter bindings
7.8.3.3. Implicit parameters and polymorphic recursion
7.8.3.4. Implicit parameters and monomorphism
7.8.4. Explicitly-kinded quantification
7.8.5. Arbitrary-rank polymorphism
7.8.5.1. Examples
7.8.5.2. Type inference
7.8.5.3. Implicit quantification
7.8.6. Impredicative polymorphism
7.8.7. Lexically scoped type variables
7.8.7.1. Overview
7.8.7.2. Declaration type signatures
7.8.7.3. Expression type signatures
7.8.7.4. Pattern type signatures
7.8.7.5. Class and instance declarations
7.8.8. Generalised typing of mutually recursive bindings
7.8.9. Monomorphic local bindings
7.9. Template Haskell
7.9.1. Syntax
7.9.2. Using Template Haskell
7.9.3. A Template Haskell Worked Example
7.9.4. Using Template Haskell with Profiling
7.9.5. Template Haskell Quasi-quotation
7.10. Arrow notation
7.10.1. do-notation for commands
7.10.2. Conditional commands
7.10.3. Defining your own control structures
7.10.4. Primitive constructs
7.10.5. Differences with the paper
7.10.6. Portability
7.11. Bang patterns
7.11.1. Informal description of bang patterns
7.11.2. Syntax and semantics
7.12. Assertions
7.13. Pragmas
7.13.1. LANGUAGE pragma
7.13.2. OPTIONS_GHC pragma
7.13.3. INCLUDE pragma
7.13.4. WARNING and DEPRECATED pragmas
7.13.5. INLINE and NOINLINE pragmas
7.13.5.1. INLINE pragma
7.13.5.2. INLINABLE pragma
7.13.5.3. NOINLINE pragma
7.13.5.4. CONLIKE modifier
7.13.5.5. Phase control
7.13.6. ANN pragmas
7.13.6.1. Annotating values
7.13.6.2. Annotating types
7.13.6.3. Annotating modules
7.13.7. LINE pragma
7.13.8. RULES pragma
7.13.9. SPECIALIZE pragma
7.13.10. SPECIALIZE instance pragma
7.13.11. UNPACK pragma
7.13.12. SOURCE pragma
7.14. Rewrite rules
7.14.1. Syntax
7.14.2. Semantics
7.14.3. How rules interact with INLINE/NOINLINE and CONLIKE pragmas
7.14.4. List fusion
7.14.5. Specialisation
7.14.6. Controlling what's going on in rewrite rules
7.14.7. CORE pragma
7.15. Special built-in functions
7.16. Generic classes
7.16.1. Using generics
7.16.2. Changes wrt the paper
7.16.3. Terminology and restrictions
7.16.4. Another example
7.17. Control over monomorphism
7.17.1. Switching off the dreaded Monomorphism Restriction
7.17.2. Monomorphic pattern bindings
7.18. Concurrent and Parallel Haskell
7.18.1. Concurrent Haskell
7.18.2. Software Transactional Memory
7.18.3. Parallel Haskell
7.18.4. Annotating pure code for parallelism
7.18.5. Data Parallel Haskell
8. Foreign function interface (FFI)
8.1. GHC extensions to the FFI Addendum
8.1.1. Unboxed types
8.1.2. Newtype wrapping of the IO monad
8.1.3. Primitive imports
8.2. Using the FFI with GHC
8.2.1. Using foreign export and foreign import ccall "wrapper" with GHC
8.2.1.1. Using your own main()
8.2.1.2. Making a Haskell library that can be called from foreign code
8.2.2. Using header files
8.2.3. Memory Allocation
8.2.4. Multi-threading and the FFI
8.2.4.1. Foreign imports and multi-threading
8.2.4.2. The relationship between Haskell threads and OS threads
8.2.4.3. Foreign exports and multi-threading
8.2.4.4. On the use of hs_exit()
9. What to do when something goes wrong
9.1. When the compiler “does the wrong thing”
9.2. When your program “does the wrong thing”
10. Other Haskell utility programs
10.1. “Yacc for Haskell”: happy
10.2. Writing Haskell interfaces to C code: hsc2hs
10.2.1. command line syntax
10.2.2. Input syntax
10.2.3. Custom constructs
11. Running GHC on Win32 systems
11.1. Starting GHC on Windows platforms
11.2. Running GHCi on Windows
11.3. Interacting with the terminal
11.4. Differences in library behaviour
11.5. Using GHC (and other GHC-compiled executables) with cygwin
11.5.1. Background
11.5.2. The problem
11.5.3. Things to do
11.6. Building and using Win32 DLLs
11.6.1. Creating a DLL
11.6.2. Making DLLs to be called from other languages
11.6.2.1. Using from VBA
11.6.2.2. Using from C++
12. Known bugs and infelicities
12.1. Haskell 98 vs. Glasgow Haskell: language non-compliance
12.1.1. Divergence from Haskell 98
12.1.1.1. Lexical syntax
12.1.1.2. Context-free syntax
12.1.1.3. Expressions and patterns
12.1.1.4. Declarations and bindings
12.1.1.5. Module system and interface files
12.1.1.6. Numbers, basic types, and built-in classes
12.1.1.7. In Prelude support
12.1.2. GHC's interpretation of undefined behaviour in Haskell 98
12.1.3. Divergence from the FFI specification
12.2. Known bugs or infelicities
12.2.1. Bugs in GHC
12.2.2. Bugs in GHCi (the interactive GHC)
Index