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), and the flag's opposite (if available).
| Flag | Description | Static/Dynamic | Reverse |
|---|---|---|---|
| -hcsuf suffix | set the suffix to use for intermediate C files | static | - |
| -hidir dir | set directory for interface files | static | - |
| -hisuf suffix | set the suffix to use for interface files | static | - |
| -o filename | set output filename | static | - |
| -odir dir | set output directory | static | - |
| -ohi filename | set the filename in which to put the interface | static | |
| -osuf suffix | set the output file suffix | static | - |
| Flag | Description | Static/Dynamic | Reverse |
|---|---|---|---|
| -fallow-overlapping-instances | dynamic | -fno-allow-overlapping-instances | |
| -fallow-undecidable-instances | Enable undecidable instances | dynamic | -fno-allow-undecidable-instances |
| -fgenerics | Enable generics | dynamic | -fno-fgenerics |
| -fglasgow-exts | Enable most language extensions | dynamic | -fno-glasgow-exts |
| -ffi or -fffi | Enable foreign function interface (implied by -fglasgow-exts) | dynamic | -fno-ffi |
| -fwith | Enable deprecated with keyword | dynamic | -fno-with |
| -fignore-asserts | Ignore assertions | dynamic | -fno-ignore-asserts |
| -fno-implicit-prelude | Don't implicitly import Prelude | dynamic | - |
| -fno-monomorphism-restriction | Disable the monomorphism restriction | dynamic | - |
| -firrefutable-tuples | Make tuple pattern matching irrefutable | dynamic | -fno-irrefutable-tuples |
| -fcontext-stackn | set the limit for context reduction | dynamic | - |
| 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-misc | enable miscellaneous warnings | dynamic | -fno-warn-misc |
| -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-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 |
| Flag | Description | Static/Dynamic | Reverse |
|---|---|---|---|
| -fcase-merge | Enable case-merging | static | -fno-case-merge |
| -fdicts-strict | Make dictionaries strict | dynamic | -fno-dicts-strict |
| -fdo-eta-reduction | Enable eta-reduction | static | -fno-do-eta-reduction |
| -fdo-lambda-eta-expansion | Enable lambda eta-reduction | static | -fno-do-lambda-eta-expansion |
| -fexcess-precision | Enable excess intermediate precision | static | -fno-excess-precision |
| -ffoldr-build-on | Enable foldr-build optimisation | static | -fno-foldr-build-on |
| -fignore-asserts | Ignore assertions in the source | static | -fno-ignore-asserts |
| -fignore-interface-pragmas | Ignore pragmas in interface files | static | -fno-ignore-interface-pragmas |
| -flet-no-escape | Enable let-no-escape optimisation | static | -fno-let-no-escape |
| -fliberate-case-threshold | Tweak the liberate-case optimisation (default: 10) | static | -fno-liberate-case-threshold |
| -fomit-interface-pragmas | Don't generate interface pragmas | static | -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 | static | - |
| -fno-cpr | Turn off CPR analysis | static | - |
| -fno-cse | Turn off common sub-expression | static | - |
| -fno-pre-inlining | Turn off pre-inlining | static | - |
| -fno-strictness | Turn off strictness analysis | static | - |
| -fnumbers-strict | Make numbers strict | dynamic | -fno-numbers-strict |
| -funbox-strict-fields | Flatten strict constructor fields | static | -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 |
| -fusagesp | Turn on UsageSP analysis | static | -fno-usagesp |
| 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 |
| -auto-dicts | Auto-add _scc_s to all dictionaries | static | -no-auto-dicts |
| -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 | - |
| Flag | Description | Static/Dynamic | Reverse |
|---|---|---|---|
| -dynamic | Use dynamic Haskell libraries (if available) | static | - |
| -llib | Link in library lib | static | - |
| -Ldir | Add dir to the list of directories searched for libraries | static | - |
| -no-link | Omit linking | static | - |
| -package name | Link in package name | static | - |
| -framework name | On Darwin/MacOS X only, link in the framework name. This option corresponds to the -framework option for Apple's Linker. | static | - |
| -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. | static | - |
| -split-objs | Split objects (for libraries) | static | - |
| -static | Use static Haskell libraries | static | - |
| -no-hs-main | Don't asssume this program contains main | static | - |
| Flag | Description | Static/Dynamic | Reverse |
|---|---|---|---|
| -pgmL cmd | Use cmd as the literate pre-processor | static | - |
| -pgmP cmd | Use cmd as the C pre-processor (with -cpp only) | static | - |
| -pgmc cmd | Use cmd as the C compiler | static | - |
| -pgma cmd | Use cmd as the assembler | static | - |
| -pgml cmd | Use cmd as the linker | static | - |
| -pgmdll cmd | Use cmd as the DLL generator | static | - |
| -pgmdep cmd | Use cmd as the dependency generator | static | - |
| -pgmF cmd | Use cmd as the pre-processor (with -F only) | static | - |
| 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 | - |
| -optc option | pass option to the C compiler | dynamic | - |
| -opta option | pass option to the assembler | dynamic | - |
| -optl option | pass option to the linker | static | - |
| -optdll option | pass option to the DLL generator | static | - |
| -optdep option | pass option to the dependency generator | static | - |
| Flag | Description | Static/Dynamic | Reverse |
|---|---|---|---|
| -dcore-lint | Turn on internal sanity checking | dynamic | - |
| -ddump-absC | Dump abstract C | dynamic | - |
| -ddump-asm | Dump assembly | dynamic | - |
| -ddump-bcos | Dump interpreter byte code | 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-parsed | Dump parse tree | dynamic | - |
| -ddump-realC | Dump “real” C | dynamic | - |
| -ddump-rn | Dump renamer output | dynamic | - |
| -ddump-rules | Dump rules | dynamic | - |
| -ddump-sat | Dump saturated output | 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-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-usagesp | Dump UsageSP analysis output | dynamic | - |
| -ddump-worker-wrapper | Dump worker-wrapper output | dynamic | - |
| -ddump-rn-trace | Trace renamer | dynamic | - |
| -ddump-rn-stats | Renamer stats | dynamic | - |
| -ddump-stix | Native code generator intermediate form | 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 | - |
| -dstg-lint | STG pass sanity checking | dynamic | - |
| -dstg-stats | Dump STG stats | dynamic | - |
| -dusagesp-lint | UsageSP sanity checker | dynamic | - |
| -dverbose-core2core | Show output from each core-to-core pass | dynamic | - |
| -dverbose-stg2stg | Show output from each STG-to-STG pass | dynamic | - |
| -unreg | Enable unregisterised compilation | static | - |
| Flag | Description | Static/Dynamic | Reverse |
|---|---|---|---|
| -funfold-casms-in-hi-file | Allow casms in unfoldings | static | - |
| -femit-extern-decls | ??? | static | - |
| -fglobalise-toplev-names | Make all top-level names global (for -split-objs) | static | - |
| -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 | - |
| -fno-prune-decls | Renamer: don't prune declarations | static | - |
| -fno-prune-tydecls | Renamer: don't prune type declarations | 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) | static | - |