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 vs. Dynamic options”), and the flag's opposite (if available).

4.17.1. Help and verbosity options

Section 4.5, “Help and verbosity options”

FlagDescriptionStatic/DynamicReverse
-?helpstatic-
-helphelpstatic-
-vverbose mode (equivalent to -v3)dynamic-
-vnset verbosity leveldynamic-
-Vdisplay GHC versionstatic-
––versiondisplay GHC versionstatic-
––numeric-versiondisplay GHC version (numeric only)static-
––print-libdirdisplay GHC library directorystatic-
-ferror-spansoutput full span in error messagesstatic-

4.17.2. Which phases to run

Section 4.4.3, “Batch compiler mode”

FlagDescriptionStatic/DynamicReverse
-EStop after preprocessing (.hspp file)static-
-CStop after generating C (.hc file)static-
-SStop after generating assembly (.s file)static-
-cStop after compiling to object code (.o file)static-

4.17.3. Alternative modes of operation

Section 4.4, “Modes of operation”

FlagDescriptionStatic/DynamicReverse
--interactiveInteractive mode - normally used by just running ghcistatic-
--makeBuild a multi-module Haskell program, automatically figuring out dependencies. Likely to be much easier, and faster, than using make.static-
-e exprEvaluate exprstatic-
-MGenerate dependency information suitable for use in a Makefile.static-
--mk-dllDLL-creation mode (Windows only)static-

4.17.4. Redirecting output

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

FlagDescriptionStatic/DynamicReverse
-hcsuf suffixset the suffix to use for intermediate C filesstatic-
-hidir dirset directory for interface filesstatic-
-hisuf suffixset the suffix to use for interface filesstatic-
-o filenameset output filenamestatic-
-odir dirset output directorystatic-
-ohi filenameset the filename in which to put the interfacestatic 
-osuf suffixset the output file suffixstatic-

4.17.5. Keeping intermediate files

Section 4.6.5, “Keeping Intermediate Files”

FlagDescriptionStatic/DynamicReverse
-keep-hc-fileretain intermediate .hc filesstatic-
-keep-s-fileretain intermediate .s filesstatic-
-keep-raw-s-fileretain intermediate .raw_s filesstatic-
-keep-tmp-filesretain all intermediate temporary filesstatic-

4.17.6. Temporary files

Section 4.6.6, “Redirecting temporary files”

FlagDescriptionStatic/DynamicReverse
-tmpdirset the directory for temporary filesstatic-

4.17.7. Finding imports

Section 4.6.3, “The search path”

FlagDescriptionStatic/DynamicReverse
-idir1:dir2:...add dir, dir2, etc. to import pathstatic-
-iEmpty the import directory liststatic-

4.17.8. Interface file options

Section 4.6.7, “Other options related to interface files”

FlagDescriptionStatic/DynamicReverse
-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.static-

4.17.9. Recompilation checking

Section 4.6.8, “The recompilation checker”

FlagDescriptionStatic/DynamicReverse
-no-recompTurn off recompilation checking; implied by any -ddump-X optiondynamic-recomp

4.17.10. Interactive-mode options

Section 3.8, “The .ghci file”

FlagDescriptionStatic/DynamicReverse
-ignore-dot-ghciDisable reading of .ghci filesstatic-
-read-dot-ghciEnable reading of .ghci filesstatic-

4.17.11. Packages

Section 4.8, “ Packages ”

FlagDescriptionStatic/DynamicReverse
-package PExpose package Pstatic-
-hide-package nameHide package Pstatic-
-ignore-package nameIgnore package Pstatic-
-package-conf fileLoad more packages from filestatic-
-no-user-package-confDon't load the user's package config file.static-

4.17.12. Language options

Section 7.1, “Language options”

FlagDescriptionStatic/DynamicReverse
-fallow-overlapping-instancesEnable overlapping instancesdynamic-fno-allow-overlapping-instances
-fallow-undecidable-instancesEnable undecidable instancesdynamic-fno-allow-undecidable-instances
-fallow-incoherent-instancesEnable incoherent instancesdynamic-fno-allow-incoherent-instances
-farrowsEnable arrow notation extensiondynamic-fno-arrows
-fcontext-stacknset the limit for context reductionstatic-
-ffi or -fffiEnable foreign function interface (implied by -fglasgow-exts)dynamic-fno-ffi
-fgenericsEnable genericsdynamic-fno-fgenerics
-fglasgow-extsEnable most language extensionsdynamic-fno-glasgow-exts
-fignore-assertsIgnore assertionsdynamic-fno-ignore-asserts
-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
-fscoped-type-variablesEnable lexically-scoped type variables. Implied by -fglasgow-exts.dynamic-fno-scoped-type-variables
-fthEnable Template Haskell. Implied by -fglasgow-exts.dynamic-fno-th

4.17.13. Warnings

(Section 4.7, “Warnings and sanity-checking”

FlagDescriptionStatic/DynamicReverse
-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-miscenable miscellaneous warningsdynamic-fno-warn-misc
-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-oprhanswarn 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)”

FlagDescriptionStatic/DynamicReverse
-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”

FlagDescriptionStatic/DynamicReverse
-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 precisionstatic-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 sourcestatic-fno-ignore-asserts
-fignore-interface-pragmasIgnore pragmas in interface filesstatic-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-cprTurn off CPR analysisstatic-fcpr
-fno-cseTurn off common sub-expressiondynamic-
-fno-full-lazinessTurn off full laziness (floating bindings outwards). It is on by default.dynamic-ffull-laziness
-fno-pre-inliningTurn off pre-inliningstatic-
-fno-strictnessTurn off strictness analysisdynamic-
-fnumbers-strictMake numbers strictdynamic-fno-numbers-strict
-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

FlagDescriptionStatic/DynamicReverse
-autoAuto-add _scc_s to all exported functionsstatic-no-auto
-auto-allAuto-add _scc_s to all top-level functionsstatic-no-auto-all
-auto-dictsAuto-add _scc_s to all dictionariesstatic-no-auto-dicts
-caf-allAuto-add _scc_s to all CAFsstatic-no-caf-all
-profTurn on profilingstatic-
-tickyTurn on ticky-ticky profilingstatic-

4.17.17. Parallelism options

Section 4.12, “Using parallel Haskell”

FlagDescriptionStatic/DynamicReverse
-gransimEnable GRANSIMstatic-
-parallelEnable Parallel Haskellstatic-
-smpEnable SMP supportstatic-

4.17.18. C pre-processor options

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

FlagDescriptionStatic/DynamicReverse
-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 filesstatic-

4.17.19. C compiler options

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

FlagDescriptionStatic/DynamicReverse
-#include fileInclude file when compiling the .hc filedynamic-

4.17.20. Code generation options

Section 4.10.6, “Options affecting code generation”

FlagDescriptionStatic/DynamicReverse
-fasmUse the native code generatordynamic-fvia-C
-fvia-CCompile via Cdynamic-fasm
-fno-codeOmit code generationstatic-

4.17.21. Linking options

Section 4.10.7, “Options affecting linking”

FlagDescriptionStatic/DynamicReverse
-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.static-
-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.static-
-llibLink in library libstatic-
-LdirAdd dir to the list of directories searched for librariesstatic-
-main-isSet main functionstatic-
-no-hs-mainDon't assume this program contains mainstatic-
-no-linkOmit linkingstatic-
-package nameLink in package namestatic-
-split-objsSplit objects (for libraries)static-
-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”

FlagDescriptionStatic/DynamicReverse
-pgmL cmdUse cmd as the literate pre-processorstatic-
-pgmP cmdUse cmd as the C pre-processor (with -cpp only)static-
-pgmc cmdUse cmd as the C compilerstatic-
-pgma cmdUse cmd as the assemblerstatic-
-pgml cmdUse cmd as the linkerstatic-
-pgmdll cmdUse cmd as the DLL generatorstatic-
-pgmdep cmdUse cmd as the dependency generatorstatic-
-pgmF cmdUse cmd as the pre-processor (with -F only)static-

4.17.23. Forcing options to particular phases

Section 4.10.2, “Forcing options to a particular phase”

FlagDescriptionStatic/DynamicReverse
-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-
-opta optionpass option to the assemblerdynamic-
-optl optionpass option to the linkerstatic-
-optdll optionpass option to the DLL generatorstatic-
-optdep optionpass option to the dependency generatorstatic-

4.17.24. Platform-specific options

Section 4.13, “Platform-specific Flags”

FlagDescriptionStatic/DynamicReverse
-mv8(SPARC only) enable version 8 supportstatic-
-monly-[32]-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”

FlagDescriptionStatic/DynamicReverse
-fext-coreGenerate .hcr external Core filesstatic-

4.17.26. Compiler debugging options

Section 4.16, “Debugging the compiler”

FlagDescriptionStatic/DynamicReverse
-dcore-lintTurn on internal sanity checkingdynamic-
-ddump-absCDump abstract Cdynamic-
-ddump-asmDump assemblydynamic-
-ddump-bcosDump interpreter byte codedynamic-
-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-parsedDump parse treedynamic-
-ddump-realCDump “real” Cdynamic-
-ddump-rnDump renamer outputdynamic-
-ddump-rulesDump rulesdynamic-
-ddump-satDump saturated outputdynamic-
-ddump-simplDump final simplifier outputdynamic-
-ddump-simpl-iterationsDump output from each simplifier iterationdynamic-
-ddump-specDump specialiser outputdynamic-
-ddump-stgDump final STGdynamic-
-ddump-stranalDump strictness analyser outputdynamic-
-ddump-tcDump typechecker outputdynamic-
-ddump-typesDump type signaturesdynamic-
-ddump-usagespDump UsageSP analysis outputdynamic-
-ddump-worker-wrapperDump worker-wrapper outputdynamic-
-ddump-rn-traceTrace renamerdynamic-
-ddump-rn-statsRenamer statsdynamic-
-ddump-stixNative code generator intermediate formdynamic-
-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-
-dstg-lintSTG pass sanity checkingdynamic-
-dstg-statsDump STG statsdynamic-
-dusagesp-lintUsageSP sanity checkerdynamic-
-dverbose-core2coreShow output from each core-to-core passdynamic-
-dverbose-stg2stgShow output from each STG-to-STG passdynamic-
-unregEnable unregisterised compilationstatic-

4.17.27. Misc compiler options

FlagDescriptionStatic/DynamicReverse
-femit-extern-decls???static-
-fglobalise-toplev-namesMake all top-level names global (for -split-objs)static-
-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-
-fno-prune-declsRenamer: don't prune declarationsstatic-
-fhistory-sizeSet simplification history sizestatic-
-funregisterisedUnregisterised compilation (use -unreg instead)static-
-fno-asm-manglingTurn off assembly mangling (use -unreg instead)static-