The Glorious Glasgow Haskell Compilation System User's Guide, Version 7.0.4
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.4
- 1.6. Release notes for version 7.0.3
- 1.7. Release notes for version 7.0.2
- 1.7.1. Compiler
- 1.7.2. GHCi
- 1.7.3. Runtime system
- 1.7.4. Build system
- 1.7.5. Haddock
- 1.7.6. Libraries
- 1.7.6.1. array
- 1.7.6.2. base
- 1.7.6.3. bin-package-db
- 1.7.6.4. bytestring
- 1.7.6.5. Cabal
- 1.7.6.6. containers
- 1.7.6.7. directory
- 1.7.6.8. extensible-exceptions
- 1.7.6.9. filepath
- 1.7.6.10. ghc-binary
- 1.7.6.11. ghc-prim
- 1.7.6.12. haskell98
- 1.7.6.13. haskell2010
- 1.7.6.14. hpc
- 1.7.6.15. integer-gmp
- 1.7.6.16. old-locale
- 1.7.6.17. old-time
- 1.7.6.18. pretty
- 1.7.6.19. process
- 1.7.6.20. random
- 1.7.6.21. template-haskell
- 1.7.6.22. time
- 1.7.6.23. unix
- 1.7.6.24. Win32
- 1.8. Release notes for version 7.0.1
- 1.8.1. Highlights
- 1.8.2. Language changes
- 1.8.3. Warnings
- 1.8.4. DLLs
- 1.8.5. Runtime system
- 1.8.6. Compiler
- 1.8.7. GHCi
- 1.8.8. Template Haskell and Quasi-Quoters
- 1.8.9. GHC API
- 1.8.10. Libraries
- 1.8.10.1. array
- 1.8.10.2. base
- 1.8.10.3. base 3 compat
- 1.8.10.4. bin-package-db
- 1.8.10.5. bytestring
- 1.8.10.6. Cabal
- 1.8.10.7. containers
- 1.8.10.8. directory
- 1.8.10.9.
dph
(dph-base, dph-par, dph-prim-interface, dph-prim-par,
dph-prim-seq, dph-seq)
- 1.8.10.10. extensible-exceptions
- 1.8.10.11. filepath
- 1.8.10.12. ghc-binary
- 1.8.10.13. ghc-prim
- 1.8.10.14. haskell98
- 1.8.10.15. haskell2010
- 1.8.10.16. hpc
- 1.8.10.17. integer-gmp
- 1.8.10.18. old-locale
- 1.8.10.19. old-time
- 1.8.10.20. pretty
- 1.8.10.21. process
- 1.8.10.22. random
- 1.8.10.23. syb
- 1.8.10.24. template-haskell
- 1.8.10.25. time
- 1.8.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.12.4.1. Unix
- 4.12.4.2. Mac OS X
- 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 RTS options
- 4.16.1.1. Setting RTS options on the command line
- 4.16.1.2. Setting RTS options at compile time
- 4.16.1.3. Setting RTS options with the
GHCRTS
environment variable - 4.16.1.4. “Hooks” to change RTS behaviour
- 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. 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.9.1. SPECIALIZE INLINE
- 7.13.9.2. SPECIALIZE for imported functions
- 7.13.9.3. Obselete SPECIALIZE syntax
- 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()
- 8.2.5. Floating point and the FFI
- 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