This section is a quick-reference for GHC's command-line flags. For each flag, we also list its static/dynamic status (see Section 4.2, “Static, Dynamic, and Mode options”), and the flag's opposite (if available).
Section 4.5, “Help and verbosity options”
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-? | help | mode | - |
-help | help | mode | - |
-n | do a dry run | dynamic | - |
-v | verbose mode (equivalent to -v3 ) | dynamic | - |
-v n | set verbosity level | dynamic | - |
-V | display GHC version | mode | - |
––version | display GHC version | mode | - |
––numeric-version | display GHC version (numeric only) | mode | - |
––print-libdir | display GHC library directory | mode | - |
-ferror-spans | output full span in error messages | static | - |
-H size | Set the minimum heap size to size | static | - |
-Rghc-timing | Summarise timing stats for GHC (same as +RTS -tstderr ) | static | - |
Section 4.4.3, “Batch compiler mode”
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-E | Stop after preprocessing (.hspp file) | mode | - |
-C | Stop after generating C (.hc file) | mode | - |
-S | Stop after generating assembly (.s file) | mode | - |
-c | Do not link | dynamic | - |
-x suffix | Override default behaviour for source files | static | - |
Section 4.4, “Modes of operation”
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
--interactive | Interactive mode - normally used by just running ghci | mode | - |
--make | Build a multi-module Haskell program, automatically figuring out dependencies. Likely to be much easier, and faster, than using make. | mode | - |
-e | Evaluate expr | mode | - |
-M | Generate dependency information suitable for use in a Makefile . | mode | - |
Section 4.6.4, “Redirecting the compilation output(s)”
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-hcsuf suffix | set the suffix to use for intermediate C files | dynamic | - |
-hidir dir | set directory for interface files | dynamic | - |
-hisuf suffix | set the suffix to use for interface files | dynamic | - |
-o filename | set output filename | dynamic | - |
-odir dir | set output directory | dynamic | - |
-ohi filename | set the filename in which to put the interface | dynamic | |
-osuf suffix | set the output file suffix | dynamic | - |
-stubdir dir | redirect FFi stub files | dynamic | - |
Section 4.6.5, “Keeping Intermediate Files”
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-keep-hc-file | retain intermediate .hc files | dynamic | - |
-keep-s-file | retain intermediate .s files | dynamic | - |
-keep-raw-s-file | retain intermediate .raw_s files | dynamic | - |
-keep-tmp-files | retain all intermediate temporary files | dynamic | - |
Section 4.6.6, “Redirecting temporary files”
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-tmpdir | set the directory for temporary files | dynamic | - |
Section 4.6.3, “The search path”
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-i dir1 :dir2 :... | add dir ,
dir2 , etc. to import path | dynamic | - |
-i | Empty the import directory list | dynamic | - |
Section 4.6.7, “Other options related to interface files”
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-ddump-hi | Dump the new interface to stdout | dynamic | - |
-ddump-hi-diffs | Show the differences vs. the old interface | dynamic | - |
-ddump-minimal-imports | Dump a minimal set of imports | dynamic | - |
--show-iface file | Read the interface in
file and dump it as text to
stdout . | mode | - |
Section 4.6.8, “The recompilation checker”
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-fforce-recomp | Turn off recompilation checking; implied by any
-ddump-X option | dynamic | -fno-force-recomp |
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-ignore-dot-ghci | Disable reading of .ghci files | static | - |
-read-dot-ghci | Enable reading of .ghci files | static | - |
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-package-name P | Compile to be part of package P | dynamic | - |
-package P | Expose package P | dynamic | - |
-hide-all-packages | Hide all packages by default | static | - |
-hide-package name | Hide package P | dynamic | - |
-ignore-package name | Ignore package P | dynamic | - |
-package-conf file | Load more packages from file | dynamic | - |
-no-user-package-conf | Don't load the user's package config file. | dynamic | - |
Section 7.1, “Language options”
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-fallow-overlapping-instances | Enable overlapping instances | dynamic | -fno-allow-overlapping-instances |
-fallow-incoherent-instances | Enable incoherent instances.
Implies -fallow-overlapping-instances | dynamic | -fno-allow-incoherent-instances |
-fallow-undecidable-instances | Enable undecidable instances | dynamic | -fno-allow-undecidable-instances |
-fcontext-stack=N n | set the limit for context reduction | dynamic | 20 |
-farrows | Enable arrow notation extension | dynamic | -fno-arrows |
-ffi or -fffi | Enable foreign function interface (implied by
-fglasgow-exts ) | dynamic | -fno-ffi |
-fgenerics | Enable generic classes | dynamic | -fno-fgenerics |
-fglasgow-exts | Enable most language extensions | dynamic | -fno-glasgow-exts |
-fimplicit-params | Enable Implicit Parameters.
Implied by -fglasgow-exts . | dynamic | -fno-implicit-params |
-firrefutable-tuples | Make tuple pattern matching irrefutable | dynamic | -fno-irrefutable-tuples |
-fno-implicit-prelude | Don't implicitly import Prelude | dynamic | -fimplicit-prelude |
-fno-monomorphism-restriction | Disable the monomorphism restriction | dynamic | -fmonomorphism-restriction |
-fno-mono-pat-binds | Make pattern bindings polymorphic | dynamic | -fmono-pat-binds |
-fextended-default-rules | Use GHCi's extended default rules in a normal module | dynamic | -fno-extended-default-rules |
-fscoped-type-variables | Enable lexically-scoped type variables.
Implied by -fglasgow-exts . | dynamic | -fno-scoped-type-variables |
-fth | Enable Template Haskell.
No longer implied by -fglasgow-exts . | dynamic | -fno-th |
-fbang-patterns | Enable bang patterns. | dynamic | -fno-bang-patterns |
Section 4.7, “Warnings and sanity-checking”
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-W | enable normal warnings | dynamic | -w |
-w | disable all warnings | dynamic | - |
-Wall | enable all warnings | dynamic | -w |
-Werror | make warnings fatal | dynamic | |
-fwarn-deprecations | warn about uses of functions & types that are deprecated | dynamic | -fno-warn-deprecations |
-fwarn-duplicate-exports | warn when an entity is exported multiple times | dynamic | -fno-warn-duplicate-exports |
-fwarn-hi-shadowing | warn when a .hi file in the
current directory shadows a library | dynamic | -fno-warn-hi-shadowing |
-fwarn-incomplete-patterns | warn when a pattern match could fail | dynamic | -fno-warn-incomplete-patterns |
-fwarn-incomplete-record-updates | warn when a record update could fail | dynamic | -fno-warn-incomplete-record-updates |
-fwarn-missing-fields | warn when fields of a record are uninitialised | dynamic | -fno-warn-missing-fields |
-fwarn-missing-methods | warn when class methods are undefined | dynamic | -fno-warn-missing-methods |
-fwarn-missing-signatures | warn about top-level functions without signatures | dynamic | -fno-warn-missing-signatures |
-fwarn-name-shadowing | warn when names are shadowed | dynamic | -fno-warn-name-shadowing |
-fwarn-orphans | warn when the module contains "orphan" instance declarations or rewrite rules | dynamic | -fno-warn-orphans |
-fwarn-overlapping-patterns | warn about overlapping patterns | dynamic | -fno-warn-overlapping-patterns |
-fwarn-simple-patterns | warn about lambda-patterns that can fail | dynamic | -fno-warn-simple-patterns |
-fwarn-type-defaults | warn when defaulting happens | dynamic | -fno-warn-type-defaults |
-fwarn-unused-binds | warn about bindings that are unused | dynamic | -fno-warn-unused-binds |
-fwarn-unused-imports | warn about unnecessary imports | dynamic | -fno-warn-unused-imports |
-fwarn-unused-matches | warn about variables in patterns that aren't used | dynamic | -fno-warn-unused-matches |
Section 4.9, “Optimisation (code improvement)”
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-O | Enable default optimisation (level 1) | dynamic | -O0 |
-O n | Set optimisation level n | dynamic | -O0 |
Section 4.9.2, “-f*
: platform-independent flags”
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-fcase-merge | Enable case-merging | dynamic | -fno-case-merge |
-fdicts-strict | Make dictionaries strict | static | -fno-dicts-strict |
-fdo-eta-reduction | Enable eta-reduction | dynamic | -fno-do-eta-reduction |
-fdo-lambda-eta-expansion | Enable lambda eta-reduction | dynamic | -fno-do-lambda-eta-expansion |
-fexcess-precision | Enable excess intermediate precision | dynamic | -fno-excess-precision |
-frules-off | Switch off all rewrite rules (including rules generated by automatic specialisation of overloaded functions) | static | -frules-off |
-fignore-asserts | Ignore assertions in the source | dynamic | -fno-ignore-asserts |
-fignore-interface-pragmas | Ignore pragmas in interface files | dynamic | -fno-ignore-interface-pragmas |
-fliberate-case-threshold | Tweak the liberate-case optimisation (default: 10) | static | -fno-liberate-case-threshold |
-fomit-interface-pragmas | Don't generate interface pragmas | dynamic | -fno-omit-interface-pragmas |
-fmax-worker-args | If a worker has that many arguments, none will be unpacked anymore (default: 10) | static | - |
-fmax-simplifier-iterations | Set the max iterations for the simplifier | dynamic | - |
-fno-state-hack | Turn off the "state hack" whereby any lambda with a real-world state token as argument is considered to be single-entry. Hence OK to inline things inside it. | static | - |
-fno-cse | Turn off common sub-expression | dynamic | - |
-fno-full-laziness | Turn off full laziness (floating bindings outwards). | dynamic | -ffull-laziness |
-fno-pre-inlining | Turn off pre-inlining | static | - |
-fno-strictness | Turn off strictness analysis | dynamic | - |
-funbox-strict-fields | Flatten strict constructor fields | dynamic | -fno-unbox-strict-fields |
-funfolding-creation-threshold | Tweak unfolding settings | static | -fno-unfolding-creation-threshold |
-funfolding-fun-discount | Tweak unfolding settings | static | -fno-unfolding-fun-discount |
-funfolding-keeness-factor | Tweak unfolding settings | static | -fno-unfolding-keeness-factor |
-funfolding-update-in-place | Tweak unfolding settings | static | -fno-unfolding-update-in-place |
-funfolding-use-threshold | Tweak unfolding settings | static | -fno-unfolding-use-threshold |
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-auto | Auto-add _scc_ s to all
exported functions | static | -no-auto |
-auto-all | Auto-add _scc_ s to all
top-level functions | static | -no-auto-all |
-caf-all | Auto-add _scc_ s to all CAFs | static | -no-caf-all |
-prof | Turn on profiling | static | - |
-ticky | Turn on ticky-ticky profiling | static | - |
Section 4.10.4, “Options affecting a Haskell pre-processor”
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-F |
Enable the use of a pre-processor
(set with -pgmF )
| dynamic | - |
Section 4.10.3, “Options affecting the C pre-processor”
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-cpp | Run the C pre-processor on Haskell source files | dynamic | - |
-D symbol [=value ] | Define a symbol in the C pre-processor | dynamic | -U symbol |
-U symbol | Undefine a symbol in the C pre-processor | dynamic | - |
-I dir | Add dir to the
directory search list for #include files | dynamic | - |
Section 4.10.5, “Options affecting the C compiler (if applicable)”
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-#include file | Include file when
compiling the .hc file | dynamic | - |
Section 4.10.6, “Options affecting code generation”
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-fasm | Use the native code generator | dynamic | -fvia-C |
-fvia-C | Compile via C | dynamic | -fasm |
-fno-code | Omit code generation | mode | - |
Section 4.10.7, “Options affecting linking”
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-fPIC | Generate position-independent code (where available) | static | - |
-dynamic | Use dynamic Haskell libraries (if available) | static | - |
-framework name | On Darwin/MacOS X only, link in the framework name .
This option corresponds to the -framework option for Apple's Linker. | dynamic | - |
-framework-path name | On Darwin/MacOS X only, add dir to the list of
directories searched for frameworks.
This option corresponds to the -F option for Apple's Linker. | dynamic | - |
-l lib | Link in library lib | dynamic | - |
-L dir | Add dir to the list of
directories searched for libraries | dynamic | - |
-main-is | Set main function | dynamic | - |
--mk-dll | DLL-creation mode (Windows only) | dynamic | - |
-no-hs-main | Don't assume this program contains main | dynamic | - |
-no-link | Omit linking | dynamic | - |
-split-objs | Split objects (for libraries) | dynamic | - |
-static | Use static Haskell libraries | static | - |
-threaded | Use the threaded runtime | static | - |
-debug | Use the debugging runtime | static | - |
Section 4.10.1, “Replacing the program for one or more phases”
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-pgmL cmd | Use cmd as the literate pre-processor | dynamic | - |
-pgmP cmd | Use cmd as the C
pre-processor (with -cpp only) | dynamic | - |
-pgmc cmd | Use cmd as the C compiler | dynamic | - |
-pgmm cmd | Use cmd as the mangler | dynamic | - |
-pgms cmd | Use cmd as the splitter | dynamic | - |
-pgma cmd | Use cmd as the assembler | dynamic | - |
-pgml cmd | Use cmd as the linker | dynamic | - |
-pgmdll cmd | Use cmd as the DLL generator | dynamic | - |
-pgmF cmd | Use cmd as the pre-processor
(with -F only) | dynamic | - |
Section 4.10.2, “Forcing options to a particular phase”
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-optL option | pass option to the literate pre-processor | dynamic | - |
-optP option | pass option to cpp (with
-cpp only) | dynamic | - |
-optF option | pass option to the
custom pre-processor | dynamic | - |
-optc option | pass option to the C compiler | dynamic | - |
-optm option | pass option to the mangler | dynamic | - |
-opta option | pass option to the assembler | dynamic | - |
-optl option | pass option to the linker | dynamic | - |
-optdll option | pass option to the DLL generator | dynamic | - |
-optdep option | pass option to the dependency generator | dynamic | - |
Section 4.13, “Platform-specific Flags”
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-monly-[432]-regs | (x86 only) give some registers back to the C compiler | dynamic | - |
Section 4.15, “Generating and compiling External Core Files”
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-fext-core | Generate .hcr external Core files | static | - |
Section 4.16, “Debugging the compiler”
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-dcore-lint | Turn on internal sanity checking | dynamic | - |
-ddump-asm | Dump assembly | dynamic | - |
-ddump-bcos | Dump interpreter byte code | dynamic | - |
-ddump-cmm | Dump C-- output | dynamic | - |
-ddump-cpranal | Dump output from CPR analysis | dynamic | - |
-ddump-cse | Dump CSE output | dynamic | - |
-ddump-deriv | Dump deriving output | dynamic | - |
-ddump-ds | Dump desugarer output | dynamic | - |
-ddump-flatC | Dump “flat” C | dynamic | - |
-ddump-foreign | Dump foreign export stubs | dynamic | - |
-ddump-inlinings | Dump inlining info | dynamic | - |
-ddump-occur-anal | Dump occurrence analysis output | dynamic | - |
-ddump-opt-cmm | Dump the results of C-- to C-- optimising passes | dynamic | - |
-ddump-parsed | Dump parse tree | dynamic | - |
-ddump-prep | Dump prepared core | dynamic | - |
-ddump-rn | Dump renamer output | dynamic | - |
-ddump-rules | Dump rules | dynamic | - |
-ddump-simpl | Dump final simplifier output | dynamic | - |
-ddump-simpl-iterations | Dump output from each simplifier iteration | dynamic | - |
-ddump-spec | Dump specialiser output | dynamic | - |
-ddump-splices | Dump TH splided expressions, and what they evaluate to | dynamic | - |
-ddump-stg | Dump final STG | dynamic | - |
-ddump-stranal | Dump strictness analyser output | dynamic | - |
-ddump-tc | Dump typechecker output | dynamic | - |
-ddump-types | Dump type signatures | dynamic | - |
-ddump-worker-wrapper | Dump worker-wrapper output | dynamic | - |
-ddump-if-trace | Trace interface files | dynamic | - |
-ddump-tc-trace | Trace typechecker | dynamic | - |
-ddump-rn-trace | Trace renamer | dynamic | - |
-ddump-rn-stats | Renamer stats | dynamic | - |
-ddump-simpl-stats | Dump simplifier stats | dynamic | - |
-dppr-debug | Turn on debug printing (more verbose) | static | - |
-dppr-noprags | Don't output pragma info in dumps | static | - |
-dppr-user-length | Set the depth for printing expressions in error msgs | static | - |
-dsource-stats | Dump haskell source stats | dynamic | - |
-dcmm-lint | C-- pass sanity checking | dynamic | - |
-dstg-lint | STG pass sanity checking | dynamic | - |
-dstg-stats | Dump STG stats | dynamic | - |
-dverbose-core2core | Show output from each core-to-core pass | dynamic | - |
-dverbose-stg2stg | Show output from each STG-to-STG pass | dynamic | - |
-dshow-passes | Print out each pass name as it happens | dynamic | - |
-dfaststring-stats | Show statistics for fast string usage when finished | dynamic | - |
-unreg | Enable unregisterised compilation | static | - |
Flag | Description | Static/Dynamic | Reverse |
---|---|---|---|
-fno-hi-version-check | Don't complain about .hi file mismatches | static | - |
-dno-black-holing | Turn off black holing (probably doesn't work) | static | - |
-fno-method-sharing | Don't share specialisations of overloaded functions | static | - |
-fhistory-size | Set simplification history size | static | - |
-funregisterised | Unregisterised compilation (use -unreg instead) | static | - |
-fno-asm-mangling | Turn off assembly mangling (use -unreg instead) | dynamic | - |
-fno-print-bind-result | Turn off printing of binding results in GHCi | dynamic | - |