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

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.10.1
1.5.1. Highlights
1.5.2. Full details Language Compiler GHCi Template Haskell Runtime system Build system Package system
1.5.3. Libraries array base bin-package-db binary bytestring Cabal containers deepseq directory filepath ghc ghc-prim haskeline hoopl hpc integer-gmp pretty process template-haskell terminfo time transformers unix Win32 xhtml
1.5.4. Known bugs
1.6. Release notes for version 7.10.2
1.6.1. GHC
1.6.2. Libraries base binary Cabal ghc
1.6.3. Known bugs
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. Multiline input
2.4.4. Type, class and other declarations
2.4.5. What's really in scope at the prompt? The effect of :load on what is in scope Controlling what is in scope with import Controlling what is in scope with the :module command Qualified names :module and :load
2.4.6. The :main and :run commands
2.4.7. The it variable
2.4.8. Type defaulting in GHCi
2.4.9. Using a custom interactive printing function
2.5. The GHCi Debugger
2.5.1. Breakpoints and inspecting variables Setting breakpoints 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 and :seti commands
2.8.1. GHCi options
2.8.2. Setting GHC command-line options in GHCi
2.8.3. Setting options for interactive evaluation only
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 Overriding the default behaviour for a file
4.6. 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. Module signatures
4.7.11. Using make
4.7.12. Dependency generation
4.7.13. 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. Thinning and renaming modules
4.9.5. Package Databases The GHC_PACKAGE_PATH environment variable
4.9.6. Installed package IDs, dependencies, and broken packages
4.9.7. Package management (the ghc-pkg command)
4.9.8. Building a package from Haskell source
4.9.9. InstalledPackageInfo: a package specification
4.9.10. Package environments
4.10. Optimisation (code improvement)
4.10.1. -O*: convenient “packages” of optimisation flags.
4.10.2. -f*: platform-independent flags
4.11. GHC Backends
4.11.1. Native code Generator (-fasm)
4.11.2. LLVM Code Generator (-fllvm)
4.11.3. C Code Generator (-fvia-C)
4.11.4. Unregisterised compilation
4.12. Options related to a particular phase
4.12.1. Replacing the program for one or more phases
4.12.2. Forcing options to a particular phase
4.12.3. Options affecting the C pre-processor CPP and string gaps
4.12.4. Options affecting a Haskell pre-processor
4.12.5. Options affecting code generation
4.12.6. Options affecting linking
4.13. Using shared libraries
4.13.1. Building programs that use shared libraries
4.13.2. Shared libraries for Haskell packages
4.13.3. Shared libraries that export a C API
4.13.4. Finding shared libraries at runtime Unix Mac OS X
4.14. Using Concurrent Haskell
4.15. Using SMP parallelism
4.15.1. Compile-time options for SMP parallelism
4.15.2. RTS options for SMP parallelism
4.15.3. Hints for using SMP parallelism
4.16. Platform-specific Flags
4.17. Running a compiled program
4.17.1. Setting RTS options Setting RTS options on the command line Setting RTS options at compile time Setting RTS options with the GHCRTS environment variable “Hooks” to change RTS behaviour
4.17.2. Miscellaneous RTS options
4.17.3. RTS options to control the garbage collector
4.17.4. RTS options for concurrency and parallelism
4.17.5. RTS options for profiling
4.17.6. Tracing
4.17.7. RTS options for hackers, debuggers, and over-interested souls
4.17.8. Getting information about the RTS
4.18. Debugging the compiler
4.18.1. Dumping out compiler intermediate structures
4.18.2. Formatting dumps
4.18.3. Suppressing unwanted information
4.18.4. Checking for consistency
4.18.5. How to read Core syntax (from some -ddump flags)
4.19. Flag reference
4.19.1. Verbosity options
4.19.2. Alternative modes of operation
4.19.3. Which phases to run
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. Plugin options
4.19.23. Replacing phases
4.19.24. Forcing options to particular phases
4.19.25. Platform-specific 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 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. Profiling Parallel and Concurrent Programs
5.7. Observing Code Coverage
5.7.1. A small example: Reciprocation
5.7.2. Options for instrumenting code for coverage
5.7.3. The hpc toolkit hpc report hpc markup hpc sum hpc combine hpc map hpc overlay and hpc draft
5.7.4. Caveats and Shortcomings of Haskell Program Coverage
5.8. 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. Negative literals
7.3.4. Fractional looking integer literals
7.3.5. Binary integer literals
7.3.6. Hierarchical Modules
7.3.7. Pattern guards
7.3.8. View patterns
7.3.9. Pattern synonyms Syntax and scoping of pattern synonyms Import and export of pattern synonyms Typing of pattern synonyms Matching of pattern synonyms
7.3.10. n+k patterns
7.3.11. Traditional record syntax
7.3.12. The recursive do-notation Recursive binding groups The mdo notation
7.3.13. Parallel List Comprehensions
7.3.14. Generalised (SQL-Like) List Comprehensions
7.3.15. Monad comprehensions
7.3.16. Rebindable syntax and the implicit Prelude import
7.3.17. Postfix operators
7.3.18. Tuple sections
7.3.19. Lambda-case
7.3.20. Empty case alternatives
7.3.21. Multi-way if-expressions
7.3.22. Record field disambiguation
7.3.23. Record puns
7.3.24. Record wildcards
7.3.25. Local Fixity Declarations
7.3.26. Import and export extensions Hiding things the imported module doesn't export Package-qualified imports Safe imports Explicit namespaces in import/export
7.3.27. 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. Type operators
7.4.5. Liberalised type synonyms
7.4.6. Existentially quantified data constructors Why existential? Existentials and type classes Record Constructors Restrictions
7.4.7. Declaring data types with explicit constructor signatures
7.4.8. 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 instances of extra classes (Data, etc)
7.5.4. Deriving Typeable instances
7.5.5. Generalised derived instances for newtypes Generalising the deriving clause A more precise specification
7.5.6. Deriving any other class
7.6. Class and instances declarations
7.6.1. Class declarations Multi-parameter type classes The superclasses of a class declaration Class method types Default method signatures Nullary type classes
7.6.2. Functional dependencies Rules for functional dependencies Background on functional dependencies
7.6.3. Instance declarations Instance resolution Relaxed rules for the instance head Relaxed rules for instance contexts Undecidable instances Overlapping instances Instance signatures: type signatures in instance declarations
7.6.4. Overloaded string literals
7.6.5. Overloaded lists The IsList class Rebindable syntax Defaulting Speculation about the future
7.7. Type families
7.7.1. Data families Data family declarations Data instance declarations Overlap of data instances
7.7.2. Synonym families Type family declarations Type instance declarations Closed type families Type family examples Compatibility and apartness of type family equations Decidability of type synonym instances
7.7.3. Associated data and type families Associated instances Associated type synonym defaults Scoping of class parameters Instance contexts and associated type and data instances
7.7.4. Import and export Examples Instances
7.7.5. Type families and instance declarations
7.8. Kind polymorphism
7.8.1. Overview of kind polymorphism
7.8.2. Overview
7.8.3. Polymorphic kind recursion and complete kind signatures
7.8.4. Kind inference in closed type families
7.8.5. Kind inference in class instance declarations
7.9. Datatype promotion
7.9.1. Motivation
7.9.2. Overview
7.9.3. Distinguishing between types and constructors
7.9.4. Promoted list and tuple types
7.9.5. Promoting existential data constructors
7.9.6. Promoting type operators
7.10. Type-Level Literals
7.10.1. Runtime Values for Type-Level Literals
7.10.2. Computing With Type-Level Naturals
7.11. Equality constraints
7.11.1. The Coercible constraint
7.12. The Constraint kind
7.13. Other type system extensions
7.13.1. Explicit universal quantification (forall)
7.13.2. The context of a type signature
7.13.3. Ambiguous types and the ambiguity check
7.13.4. Implicit parameters Implicit-parameter type constraints Implicit-parameter bindings Implicit parameters and polymorphic recursion Implicit parameters and monomorphism Special implicit parameters
7.13.5. Explicitly-kinded quantification
7.13.6. Arbitrary-rank polymorphism Examples Type inference Implicit quantification
7.13.7. Impredicative polymorphism
7.13.8. Lexically scoped type variables Overview Declaration type signatures Expression type signatures Pattern type signatures Class and instance declarations
7.13.9. Bindings and generalisation Switching off the dreaded Monomorphism Restriction Generalised typing of mutually recursive bindings Let-generalisation
7.14. Typed Holes
7.15. Partial Type Signatures
7.15.1. Syntax Type Wildcards Named Wildcards Extra-Constraints Wildcard
7.15.2. Where can they occur?
7.16. Deferring type errors to runtime
7.16.1. Enabling deferring of type errors
7.16.2. Deferred type errors in GHCi
7.17. Template Haskell
7.17.1. Syntax
7.17.2. Using Template Haskell
7.17.3. Viewing Template Haskell generated code
7.17.4. A Template Haskell Worked Example
7.17.5. Using Template Haskell with Profiling
7.17.6. Template Haskell Quasi-quotation
7.18. Arrow notation
7.18.1. do-notation for commands
7.18.2. Conditional commands
7.18.3. Defining your own control structures
7.18.4. Primitive constructs
7.18.5. Differences with the paper
7.18.6. Portability
7.19. Bang patterns
7.19.1. Informal description of bang patterns
7.19.2. Syntax and semantics
7.20. Assertions
7.21. Static pointers
7.21.1. Using static pointers
7.21.2. Static semantics of static pointers
7.22. Pragmas
7.22.1. LANGUAGE pragma
7.22.2. OPTIONS_GHC pragma
7.22.3. INCLUDE pragma
7.22.4. WARNING and DEPRECATED pragmas
7.22.5. MINIMAL pragma
7.22.6. INLINE and NOINLINE pragmas INLINE pragma INLINABLE pragma NOINLINE pragma CONLIKE modifier Phase control
7.22.7. LINE pragma
7.22.8. RULES pragma
7.22.9. SPECIALIZE pragma SPECIALIZE INLINE SPECIALIZE for imported functions Obsolete SPECIALIZE syntax
7.22.10. SPECIALIZE instance pragma
7.22.11. UNPACK pragma
7.22.12. NOUNPACK pragma
7.22.13. SOURCE pragma
7.23. Rewrite rules
7.23.1. Syntax
7.23.2. Semantics
7.23.3. How rules interact with INLINE/NOINLINE pragmas
7.23.4. How rules interact with CONLIKE pragmas
7.23.5. List fusion
7.23.6. Specialisation
7.23.7. Controlling what's going on in rewrite rules
7.24. Special built-in functions
7.25. Generic classes
7.26. Generic programming
7.26.1. Deriving representations
7.26.2. Writing generic functions
7.26.3. Generic defaults
7.26.4. More information
7.27. Roles
7.27.1. Nominal, Representational, and Phantom
7.27.2. Role inference
7.27.3. Role annotations
7.28. Concurrent and Parallel Haskell
7.28.1. Concurrent Haskell
7.28.2. Software Transactional Memory
7.28.3. Parallel Haskell
7.28.4. Annotating pure code for parallelism
7.28.5. Data Parallel Haskell
7.29. Safe Haskell
7.29.1. Uses of Safe Haskell Strict type-safety (good style) Building secure systems (restricted IO Monads)
7.29.2. Safe Language
7.29.3. Safe Imports
7.29.4. Trust and Safe Haskell Modes Trust check (-fpackage-trust disabled) Trust check (-fpackage-trust enabled) Example Trustworthy Requirements Package Trust
7.29.5. Safe Haskell Inference
7.29.6. Safe Haskell Flag Summary
7.29.7. Safe Compilation
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.1.4. Interruptible foreign calls
8.1.5. The CAPI calling convention
8.1.6. hs_thread_done()
8.2. Using the FFI with GHC
8.2.1. Using foreign export and foreign import ccall "wrapper" with GHC Using your own main() 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 Foreign imports and multi-threading The relationship between Haskell threads and OS threads Foreign exports and multi-threading On the use of hs_exit()
8.2.5. Floating point and the FFI
9. Extending and using GHC as a Library
9.1. Source annotations
9.1.1. Annotating values
9.1.2. Annotating types
9.1.3. Annotating modules
9.2. Using GHC as a Library
9.3. Compiler Plugins
9.3.1. Using compiler plugins
9.3.2. Writing compiler plugins
9.3.3. Core plugins in more detail Manipulating bindings Using Annotations
9.3.4. Typechecker plugins Constraint solving with plugins
10. What to do when something goes wrong
10.1. When the compiler “does the wrong thing”
10.2. When your program “does the wrong thing”
11. Other Haskell utility programs
11.1. “Yacc for Haskell”: happy
11.2. Writing Haskell interfaces to C code: hsc2hs
11.2.1. command line syntax
11.2.2. Input syntax
11.2.3. Custom constructs
11.2.4. Cross-compilation
12. Running GHC on Win32 systems
12.1. Starting GHC on Windows platforms
12.2. Running GHCi on Windows
12.3. Interacting with the terminal
12.4. Differences in library behaviour
12.5. Using GHC (and other GHC-compiled executables) with cygwin
12.5.1. Background
12.5.2. The problem
12.5.3. Things to do
12.6. Building and using Win32 DLLs
12.6.1. Creating a DLL
12.6.2. Making DLLs to be called from other languages Using from VBA Using from C++
13. Known bugs and infelicities
13.1. Haskell standards vs. Glasgow Haskell: language non-compliance
13.1.1. Divergence from Haskell 98 and Haskell 2010 Lexical syntax Context-free syntax Expressions and patterns Declarations and bindings Module system and interface files Numbers, basic types, and built-in classes In Prelude support The Foreign Function Interface
13.1.2. GHC's interpretation of undefined behaviour in Haskell 98 and Haskell 2010
13.2. Known bugs or infelicities
13.2.1. Bugs in GHC
13.2.2. Bugs in GHCi (the interactive GHC)