4.17. Flag reference

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).

4.17.1. Help and verbosity options

Section 4.5, “Help and verbosity options”

-ndo a dry rundynamic-
-vverbose mode (equivalent to -v3)dynamic-
-vnset verbosity leveldynamic-
-Vdisplay GHC versionmode-
––versiondisplay GHC versionmode-
––numeric-versiondisplay GHC version (numeric only)mode-
––print-libdirdisplay GHC library directorymode-
-ferror-spansoutput full span in error messagesstatic-
-HsizeSet the minimum heap size to sizestatic-
-Rghc-timingSummarise timing stats for GHC (same as +RTS -tstderr)static-

4.17.2. Which phases to run

Section 4.4.3, “Batch compiler mode”

-EStop after preprocessing (.hspp file)mode-
-CStop after generating C (.hc file)mode-
-SStop after generating assembly (.s file)mode-
-cDo not linkdynamic-
-x suffixOverride default behaviour for source filesstatic-

4.17.3. Alternative modes of operation

Section 4.4, “Modes of operation”

--interactiveInteractive mode - normally used by just running ghcimode-
--makeBuild a multi-module Haskell program, automatically figuring out dependencies. Likely to be much easier, and faster, than using make.mode-
-e exprEvaluate exprmode-
-MGenerate dependency information suitable for use in a Makefile.mode-

4.17.4. Redirecting output

Section 4.6.4, “Redirecting the compilation output(s)”

-hcsuf suffixset the suffix to use for intermediate C filesdynamic-
-hidir dirset directory for interface filesdynamic-
-hisuf suffixset the suffix to use for interface filesdynamic-
-o filenameset output filenamedynamic-
-odir dirset output directorydynamic-
-ohi filenameset the filename in which to put the interfacedynamic 
-osuf suffixset the output file suffixdynamic-
-stubdir dirredirect FFi stub filesdynamic-

4.17.5. Keeping intermediate files

Section 4.6.5, “Keeping Intermediate Files”

-keep-hc-fileretain intermediate .hc filesdynamic-
-keep-s-fileretain intermediate .s filesdynamic-
-keep-raw-s-fileretain intermediate .raw_s filesdynamic-
-keep-tmp-filesretain all intermediate temporary filesdynamic-

4.17.6. Temporary files

Section 4.6.6, “Redirecting temporary files”

-tmpdirset the directory for temporary filesdynamic-

4.17.7. Finding imports

Section 4.6.3, “The search path”

-idir1:dir2:...add dir, dir2, etc. to import pathdynamic-
-iEmpty the import directory listdynamic-

4.17.8. Interface file options

Section 4.6.7, “Other options related to interface files”

-ddump-hiDump the new interface to stdoutdynamic-
-ddump-hi-diffsShow the differences vs. the old interfacedynamic-
-ddump-minimal-importsDump a minimal set of importsdynamic-
--show-iface fileRead the interface in file and dump it as text to stdout.mode-

4.17.9. Recompilation checking

Section 4.6.8, “The recompilation checker”

-fforce-recompTurn off recompilation checking; implied by any -ddump-X optiondynamic-fno-force-recomp

4.17.10. Interactive-mode options

Section 3.8, “The .ghci file”

-ignore-dot-ghciDisable reading of .ghci filesstatic-
-read-dot-ghciEnable reading of .ghci filesstatic-

4.17.11. Packages

Section 4.8, “ Packages ”

-package-name PCompile to be part of package Pdynamic-
-package PExpose package Pdynamic-
-hide-all-packagesHide all packages by defaultstatic-
-hide-package nameHide package Pdynamic-
-ignore-package nameIgnore package Pdynamic-
-package-conf fileLoad more packages from filedynamic-
-no-user-package-confDon't load the user's package config file.dynamic-

4.17.12. Language options

Section 7.1, “Language options”

-fallow-overlapping-instancesEnable overlapping instancesdynamic-fno-allow-overlapping-instances
-fallow-incoherent-instancesEnable incoherent instances. Implies -fallow-overlapping-instances dynamic-fno-allow-incoherent-instances
-fallow-undecidable-instancesEnable undecidable instancesdynamic-fno-allow-undecidable-instances
-fcontext-stack=Nnset the limit for context reductiondynamic20
-farrowsEnable arrow notation extensiondynamic-fno-arrows
-ffi or -fffiEnable foreign function interface (implied by -fglasgow-exts)dynamic-fno-ffi
-fgenericsEnable generic classesdynamic-fno-fgenerics
-fglasgow-extsEnable most language extensionsdynamic-fno-glasgow-exts
-fimplicit-paramsEnable Implicit Parameters. Implied by -fglasgow-exts.dynamic-fno-implicit-params
-firrefutable-tuplesMake tuple pattern matching irrefutabledynamic-fno-irrefutable-tuples
-fno-implicit-preludeDon't implicitly import Preludedynamic-fimplicit-prelude
-fno-monomorphism-restrictionDisable the monomorphism restrictiondynamic-fmonomorphism-restriction
-fno-mono-pat-bindsMake pattern bindings polymorphicdynamic-fmono-pat-binds
-fextended-default-rulesUse GHCi's extended default rules in a normal moduledynamic-fno-extended-default-rules
-fscoped-type-variablesEnable lexically-scoped type variables. Implied by -fglasgow-exts.dynamic-fno-scoped-type-variables
-fthEnable Template Haskell. No longer implied by -fglasgow-exts.dynamic-fno-th
-fbang-patternsEnable bang patterns.dynamic-fno-bang-patterns

4.17.13. Warnings

Section 4.7, “Warnings and sanity-checking”

-Wenable normal warningsdynamic-w
-wdisable all warningsdynamic-
-Wallenable all warningsdynamic-w
-Werrormake warnings fataldynamic 
-fwarn-deprecationswarn about uses of functions & types that are deprecateddynamic-fno-warn-deprecations
-fwarn-duplicate-exportswarn when an entity is exported multiple timesdynamic-fno-warn-duplicate-exports
-fwarn-hi-shadowingwarn when a .hi file in the current directory shadows a librarydynamic-fno-warn-hi-shadowing
-fwarn-incomplete-patternswarn when a pattern match could faildynamic-fno-warn-incomplete-patterns
-fwarn-incomplete-record-updateswarn when a record update could faildynamic-fno-warn-incomplete-record-updates
-fwarn-missing-fieldswarn when fields of a record are uninitialiseddynamic-fno-warn-missing-fields
-fwarn-missing-methodswarn when class methods are undefineddynamic-fno-warn-missing-methods
-fwarn-missing-signatureswarn about top-level functions without signaturesdynamic-fno-warn-missing-signatures
-fwarn-name-shadowingwarn when names are shadoweddynamic-fno-warn-name-shadowing
-fwarn-orphanswarn when the module contains "orphan" instance declarations or rewrite rulesdynamic-fno-warn-orphans
-fwarn-overlapping-patternswarn about overlapping patternsdynamic-fno-warn-overlapping-patterns
-fwarn-simple-patternswarn about lambda-patterns that can faildynamic-fno-warn-simple-patterns
-fwarn-type-defaultswarn when defaulting happensdynamic-fno-warn-type-defaults
-fwarn-unused-bindswarn about bindings that are unuseddynamic-fno-warn-unused-binds
-fwarn-unused-importswarn about unnecessary importsdynamic-fno-warn-unused-imports
-fwarn-unused-matcheswarn about variables in patterns that aren't useddynamic-fno-warn-unused-matches

4.17.14. Optimisation levels

Section 4.9, “Optimisation (code improvement)”

-OEnable default optimisation (level 1)dynamic-O0
-OnSet optimisation level ndynamic-O0

4.17.15. Individual optimisations

Section 4.9.2, “-f*: platform-independent flags”

-fcase-mergeEnable case-mergingdynamic-fno-case-merge
-fdicts-strictMake dictionaries strictstatic-fno-dicts-strict
-fdo-eta-reductionEnable eta-reductiondynamic-fno-do-eta-reduction
-fdo-lambda-eta-expansionEnable lambda eta-reductiondynamic-fno-do-lambda-eta-expansion
-fexcess-precisionEnable excess intermediate precisiondynamic-fno-excess-precision
-frules-offSwitch off all rewrite rules (including rules generated by automatic specialisation of overloaded functions)static-frules-off
-fignore-assertsIgnore assertions in the sourcedynamic-fno-ignore-asserts
-fignore-interface-pragmasIgnore pragmas in interface filesdynamic-fno-ignore-interface-pragmas
-fliberate-case-thresholdTweak the liberate-case optimisation (default: 10)static-fno-liberate-case-threshold
-fomit-interface-pragmasDon't generate interface pragmasdynamic-fno-omit-interface-pragmas
-fmax-worker-argsIf a worker has that many arguments, none will be unpacked anymore (default: 10)static-
-fmax-simplifier-iterationsSet the max iterations for the simplifierdynamic-
-fno-state-hackTurn 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-cseTurn off common sub-expressiondynamic-
-fno-full-lazinessTurn off full laziness (floating bindings outwards).dynamic-ffull-laziness
-fno-pre-inliningTurn off pre-inliningstatic-
-fno-strictnessTurn off strictness analysisdynamic-
-funbox-strict-fieldsFlatten strict constructor fieldsdynamic-fno-unbox-strict-fields
-funfolding-creation-thresholdTweak unfolding settingsstatic-fno-unfolding-creation-threshold
-funfolding-fun-discountTweak unfolding settingsstatic-fno-unfolding-fun-discount
-funfolding-keeness-factorTweak unfolding settingsstatic-fno-unfolding-keeness-factor
-funfolding-update-in-placeTweak unfolding settingsstatic-fno-unfolding-update-in-place
-funfolding-use-thresholdTweak unfolding settingsstatic-fno-unfolding-use-threshold

4.17.16. Profiling options

Chapter 5, Profiling

-autoAuto-add _scc_s to all exported functionsstatic-no-auto
-auto-allAuto-add _scc_s to all top-level functionsstatic-no-auto-all
-caf-allAuto-add _scc_s to all CAFsstatic-no-caf-all
-profTurn on profilingstatic-
-tickyTurn on ticky-ticky profilingstatic-

4.17.17. Haskell pre-processor options

Section 4.10.4, “Options affecting a Haskell pre-processor”

-F Enable the use of a pre-processor (set with -pgmF) dynamic-

4.17.18. C pre-processor options

Section 4.10.3, “Options affecting the C pre-processor”

-cppRun the C pre-processor on Haskell source filesdynamic-
-Dsymbol[=value]Define a symbol in the C pre-processordynamic-Usymbol
-UsymbolUndefine a symbol in the C pre-processordynamic-
-IdirAdd dir to the directory search list for #include filesdynamic-

4.17.19. C compiler options

Section 4.10.5, “Options affecting the C compiler (if applicable)”

-#include fileInclude file when compiling the .hc filedynamic-

4.17.20. Code generation options

Section 4.10.6, “Options affecting code generation”

-fasmUse the native code generatordynamic-fvia-C
-fvia-CCompile via Cdynamic-fasm
-fno-codeOmit code generationmode-

4.17.21. Linking options

Section 4.10.7, “Options affecting linking”

-fPICGenerate position-independent code (where available)static-
-dynamicUse dynamic Haskell libraries (if available)static-
-framework nameOn Darwin/MacOS X only, link in the framework name. This option corresponds to the -framework option for Apple's Linker.dynamic-
-framework-path nameOn 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-
-llibLink in library libdynamic-
-LdirAdd dir to the list of directories searched for librariesdynamic-
-main-isSet main functiondynamic-
--mk-dllDLL-creation mode (Windows only)dynamic-
-no-hs-mainDon't assume this program contains maindynamic-
-no-linkOmit linkingdynamic-
-split-objsSplit objects (for libraries)dynamic-
-staticUse static Haskell librariesstatic-
-threadedUse the threaded runtimestatic-
-debugUse the debugging runtimestatic-

4.17.22. Replacing phases

Section 4.10.1, “Replacing the program for one or more phases”

-pgmL cmdUse cmd as the literate pre-processordynamic-
-pgmP cmdUse cmd as the C pre-processor (with -cpp only)dynamic-
-pgmc cmdUse cmd as the C compilerdynamic-
-pgmm cmdUse cmd as the manglerdynamic-
-pgms cmdUse cmd as the splitterdynamic-
-pgma cmdUse cmd as the assemblerdynamic-
-pgml cmdUse cmd as the linkerdynamic-
-pgmdll cmdUse cmd as the DLL generatordynamic-
-pgmF cmdUse cmd as the pre-processor (with -F only)dynamic-

4.17.23. Forcing options to particular phases

Section 4.10.2, “Forcing options to a particular phase”

-optL optionpass option to the literate pre-processordynamic-
-optP optionpass option to cpp (with -cpp only)dynamic-
-optF optionpass option to the custom pre-processordynamic-
-optc optionpass option to the C compilerdynamic-
-optm optionpass option to the manglerdynamic-
-opta optionpass option to the assemblerdynamic-
-optl optionpass option to the linkerdynamic-
-optdll optionpass option to the DLL generatordynamic-
-optdep optionpass option to the dependency generatordynamic-

4.17.24. Platform-specific options

Section 4.13, “Platform-specific Flags”

-monly-[432]-regs(x86 only) give some registers back to the C compilerdynamic-

4.17.25. External core file options

Section 4.15, “Generating and compiling External Core Files”

-fext-coreGenerate .hcr external Core filesstatic-

4.17.26. Compiler debugging options

Section 4.16, “Debugging the compiler”

-dcore-lintTurn on internal sanity checkingdynamic-
-ddump-asmDump assemblydynamic-
-ddump-bcosDump interpreter byte codedynamic-
-ddump-cmmDump C-- outputdynamic-
-ddump-cpranalDump output from CPR analysisdynamic-
-ddump-cseDump CSE outputdynamic-
-ddump-derivDump deriving outputdynamic-
-ddump-dsDump desugarer outputdynamic-
-ddump-flatCDump “flat” Cdynamic-
-ddump-foreignDump foreign export stubsdynamic-
-ddump-inliningsDump inlining infodynamic-
-ddump-occur-analDump occurrence analysis outputdynamic-
-ddump-opt-cmmDump the results of C-- to C-- optimising passesdynamic-
-ddump-parsedDump parse treedynamic-
-ddump-prepDump prepared coredynamic-
-ddump-rnDump renamer outputdynamic-
-ddump-rulesDump rulesdynamic-
-ddump-simplDump final simplifier outputdynamic-
-ddump-simpl-iterationsDump output from each simplifier iterationdynamic-
-ddump-specDump specialiser outputdynamic-
-ddump-splicesDump TH splided expressions, and what they evaluate todynamic-
-ddump-stgDump final STGdynamic-
-ddump-stranalDump strictness analyser outputdynamic-
-ddump-tcDump typechecker outputdynamic-
-ddump-typesDump type signaturesdynamic-
-ddump-worker-wrapperDump worker-wrapper outputdynamic-
-ddump-if-traceTrace interface filesdynamic-
-ddump-tc-traceTrace typecheckerdynamic-
-ddump-rn-traceTrace renamerdynamic-
-ddump-rn-statsRenamer statsdynamic-
-ddump-simpl-statsDump simplifier statsdynamic-
-dppr-debugTurn on debug printing (more verbose)static-
-dppr-nopragsDon't output pragma info in dumpsstatic-
-dppr-user-lengthSet the depth for printing expressions in error msgsstatic-
-dsource-statsDump haskell source statsdynamic-
-dcmm-lintC-- pass sanity checkingdynamic-
-dstg-lintSTG pass sanity checkingdynamic-
-dstg-statsDump STG statsdynamic-
-dverbose-core2coreShow output from each core-to-core passdynamic-
-dverbose-stg2stgShow output from each STG-to-STG passdynamic-
-dshow-passesPrint out each pass name as it happensdynamic-
-dfaststring-statsShow statistics for fast string usage when finisheddynamic-
-unregEnable unregisterised compilationstatic-

4.17.27. Misc compiler options

-fno-hi-version-checkDon't complain about .hi file mismatchesstatic-
-dno-black-holingTurn off black holing (probably doesn't work)static-
-fno-method-sharingDon't share specialisations of overloaded functionsstatic-
-fhistory-sizeSet simplification history sizestatic-
-funregisterisedUnregisterised compilation (use -unreg instead)static-
-fno-asm-manglingTurn off assembly mangling (use -unreg instead)dynamic-
-fno-print-bind-resultTurn off printing of binding results in GHCidynamic-