ghc - the Glasgow Haskell Compiler
ghc [option|filename]
ghci [option|filename]
This manual page documents briefly the ghc and ghci
commands. Note that ghci is not yet available on all architectures.
Extensive documentation is available in various other formats including PDF
and HTML; see below.
Each of GHC's command line options is classified as either
static or dynamic. A static flag may only be specified on the
command line, whereas a dynamic flag may also be given in an OPTIONS
pragma in a source file or set from the GHCi command-line with :set
.
As a rule of thumb, all the language options are dynamic, as are
the warning options and the debugging options.
The rest are static, with the notable exceptions of -v,
-cpp, -fasm, -fvia-C, -fllvm, and
-#include. The OPTIONS sections lists the status of each flag.
Common suffixes of file names for Haskell are:
- .hs
- Haskell source code; preprocess, compile
- .lhs
- literate Haskell source; unlit, preprocess, compile
- .hi
- Interface file; contains information about exported symbols
- .hc
- intermediate C files
- .⟨way⟩_o
- object files for "way" ⟨way⟩; common ways
are:
- dyn
- dynamically-linked
- p
- built with profiling
- .⟨way⟩_hi
- interface files for "way" ⟨way⟩; common ways
are:
- Code
generation
- -dynamic-too -fasm -fbyte-code -fllvm
-fno-code -fobject-code -fPIC -fPIE
-fwrite-interface
- Debugging the
compiler
- -dcmm-lint -dcore-lint -ddump-asm
-ddump-asm-expanded -ddump-asm-liveness
-ddump-asm-native -ddump-asm-regalloc
-ddump-asm-regalloc-stages -ddump-asm-stats
-ddump-bcos -ddump-cmm -ddump-cmm-caf
-ddump-cmm-cbe -ddump-cmm-cfg -ddump-cmm-cps
-ddump-cmm-from-stg -ddump-cmm-info -ddump-cmm-proc
-ddump-cmm-procmap -ddump-cmm-raw -ddump-cmm-sink
-ddump-cmm-sp -ddump-cmm-split -ddump-cmm-switch
-ddump-cmm-verbose -ddump-core-stats -ddump-cse
-ddump-deriv -ddump-ds -ddump-ec-trace
-ddump-foreign -ddump-if-trace -ddump-inlinings
-ddump-json -ddump-llvm -ddump-occur-anal
-ddump-opt-cmm -ddump-parsed -ddump-parsed-ast
-ddump-prep -ddump-rn -ddump-rn-ast
-ddump-rn-stats -ddump-rn-trace -ddump-rule-firings
-ddump-rule-rewrites -ddump-rules -ddump-simpl
-ddump-simpl-iterations -ddump-simpl-stats
-ddump-spec -ddump-splices -ddump-stg
-ddump-str-signatures -ddump-stranal -ddump-tc
-ddump-tc-ast -ddump-tc-trace -ddump-timings
-ddump-to-file -ddump-types -ddump-vect
-ddump-vt-trace -ddump-worker-wrapper
-dfaststring-stats -dinitial-unique=⟨s⟩
-dno-debug-output -dppr-case-as-let
-dppr-cols=⟨n⟩ -dppr-debug
-dppr-user-length -dshow-passes -dstg-lint
-dsuppress-all -dsuppress-coercions -dsuppress-idinfo
-dsuppress-module-prefixes -dsuppress-stg-free-vars
-dsuppress-ticks -dsuppress-type-applications
-dsuppress-type-signatures -dsuppress-unfoldings
-dsuppress-uniques -dsuppress-var-kinds
-dth-dec-file=⟨file⟩
-dunique-increment=⟨i⟩ -dverbose-core2core
-dverbose-stg2stg -falignment-sanitisation
-fcatch-bottoms -fllvm-fill-undef-with-garbage -g
-g⟨n⟩
- C pre-processor
- -cpp -D⟨symbol⟩[=⟨value⟩]
-I⟨dir⟩ -U⟨symbol⟩
- Finding
imports
- -i -i⟨dir⟩[:⟨dir⟩]*
- Interactive
mode
- -fbreak-on-error -fbreak-on-exception
-fghci-hist-size=⟨n⟩ -flocal-ghci-history
-fprint-bind-result -fshow-loaded-modules
-ghci-script -ignore-dot-ghci -interactive-print
⟨expr⟩
- Interface
files
- --show-iface ⟨file⟩ -ddump-hi
-ddump-hi-diffs -ddump-minimal-imports
- Keeping intermediate
files
- -keep-hc-file -keep-hc-files -keep-hi-files
-keep-llvm-file -keep-llvm-files -keep-o-files
-keep-s-file -keep-s-files -keep-tmp-files
- Language
options
- -XAllowAmbiguousTypes -XApplicativeDo -XArrows
-XBangPatterns -XBinaryLiterals -XCApiFFI
-XConstrainedClassMethods -XConstraintKinds -XCPP
-XDataKinds -XDatatypeContexts -XDefaultSignatures
-XDeriveAnyClass -XDeriveDataTypeable
-XDeriveFoldable -XDeriveFunctor -XDeriveGeneric
-XDeriveLift -XDeriveTraversable -XDerivingStrategies
-XDisambiguateRecordFields -XDuplicateRecordFields
-XEmptyCase -XEmptyDataDecls -XEmptyDataDeriving
-XExistentialQuantification -XExplicitForAll
-XExplicitNamespaces -XExtendedDefaultRules
-XFlexibleContexts -XFlexibleInstances
-XForeignFunctionInterface -XFunctionalDependencies
-XGADTs -XGADTSyntax -XGeneralisedNewtypeDeriving
-XGeneralizedNewtypeDeriving -XHexFloatLiterals
-XImplicitParams -XImpredicativeTypes
-XIncoherentInstances -XInstanceSigs
-XInterruptibleFFI -XKindSignatures -XLambdaCase
-XLiberalTypeSynonyms -XMagicHash
-XMonadComprehensions -XMonadFailDesugaring
-XMonoLocalBinds -XMultiParamTypeClasses -XMultiWayIf
-XNamedFieldPuns -XNamedWildCards -XNegativeLiterals
-XNoImplicitPrelude -XNoMonomorphismRestriction
-XNoPatternGuards -XNoTraditionalRecordSyntax
-XNPlusKPatterns -XNullaryTypeClasses -XNumDecimals
-XOverlappingInstances -XOverloadedLabels
-XOverloadedLists -XOverloadedStrings
-XPackageImports -XParallelListComp
-XPartialTypeSignatures -XPatternSynonyms -XPolyKinds
-XPostfixOperators -XQuasiQuotes -XRank2Types
-XRankNTypes -XRebindableSyntax -XRecordWildCards
-XRecursiveDo -XRoleAnnotations -XSafe
-XScopedTypeVariables -XStandaloneDeriving
-XStaticPointers -XStrict -XStrictData
-XTemplateHaskell -XTemplateHaskellQuotes
-XTransformListComp -XTrustworthy -XTupleSections
-XTypeApplications -XTypeFamilies
-XTypeFamilyDependencies -XTypeInType -XTypeOperators
-XTypeSynonymInstances -XUnboxedSums -XUnboxedTuples
-XUndecidableInstances -XUndecidableSuperClasses
-XUnicodeSyntax -XUnsafe -XViewPatterns
- Linking
options
- -c -debug -dylib-install-name ⟨path⟩
-dynamic -dynload -eventlog
-fno-embed-manifest -fno-gen-manifest
-fno-shared-implib -framework ⟨name⟩
-framework-path ⟨dir⟩ -fwhole-archive-hs-libs
-L ⟨dir⟩ -l ⟨lib⟩ -main-is
⟨thing⟩ -no-hs-main
-no-rtsopts-suggestions -package ⟨name⟩
-pie -rdynamic
-rtsopts[=⟨none|some|all⟩] -shared
-split-objs -split-sections -static -staticlib
-threaded -with-rtsopts=⟨opts⟩
- Miscellaneous
options
- -fexternal-interpreter -fglasgow-exts -ghcversion-file
⟨path to ghcversion.h⟩ -H ⟨size⟩
-j[⟨n⟩]
- Modes of
operation
- --frontend ⟨module⟩ --help -?
--info --interactive --make --mk-dll
--numeric-version --print-libdir --show-iface
⟨file⟩ --show-options
--supported-extensions --supported-languages
--version -V -e ⟨expr⟩ -M
- Individual
optimizations
- -fcall-arity -fcase-folding -fcase-merge
-fcmm-elim-common-blocks -fcmm-sink -fcpr-anal
-fcross-module-specialise -fcse -fdicts-cheap
-fdicts-strict -fdmd-tx-dict-sel -fdo-eta-reduction
-fdo-lambda-eta-expansion -feager-blackholing
-fenable-rewrite-rules -fexcess-precision
-fexitification -fexpose-all-unfoldings -ffloat-in
-ffull-laziness -ffun-to-thunk -fignore-asserts
-fignore-interface-pragmas -flate-dmd-anal
-fliberate-case -fliberate-case-threshold=⟨n⟩
-fllvm-pass-vectors-in-regs -floopification
-fmax-inline-alloc-size=⟨n⟩
-fmax-inline-memcpy-insns=⟨n⟩
-fmax-inline-memset-insns=⟨n⟩
-fmax-relevant-binds=⟨n⟩
-fmax-simplifier-iterations=⟨n⟩
-fmax-uncovered-patterns=⟨n⟩
-fmax-valid-substitutions=⟨n⟩
-fmax-worker-args=⟨n⟩ -fno-opt-coercion
-fno-pre-inlining -fno-state-hack
-fomit-interface-pragmas -fomit-yields
-foptimal-applicative-do -fpedantic-bottoms
-fregs-graph -fregs-iterative
-fsimpl-tick-factor=⟨n⟩
-fsimplifier-phases=⟨n⟩ -fsolve-constant-dicts
-fspec-constr -fspec-constr-count=⟨n⟩
-fspec-constr-keen -fspec-constr-threshold=⟨n⟩
-fspecialise -fspecialise-aggressively
-fstatic-argument-transformation -fstg-cse
-fstrictness -fstrictness-before=⟨n⟩
-funbox-small-strict-fields -funbox-strict-fields
-funfolding-creation-threshold=⟨n⟩
-funfolding-dict-discount=⟨n⟩
-funfolding-fun-discount=⟨n⟩
-funfolding-keeness-factor=⟨n⟩
-funfolding-use-threshold=⟨n⟩
-fvectorisation-avoidance -fvectorise
- Optimization
levels
- -O -O1 -O0 -O2 -Odph
- Package
options
- -clear-package-db -distrust ⟨pkg⟩
-distrust-all-packages -fpackage-trust
-global-package-db -hide-all-packages -hide-package
⟨pkg⟩ -ignore-package ⟨pkg⟩
-no-auto-link-packages -no-global-package-db
-no-user-package-db -package ⟨pkg⟩
-package-db ⟨file⟩ -package-env
⟨file⟩|⟨name⟩ -package-id
⟨unit-id⟩ -this-unit-id ⟨unit-id⟩
-trust ⟨pkg⟩ -user-package-db
- Phases of
compilation
- -C -c -E -F -S -x
⟨suffix⟩
- Overriding
external programs
- -pgma ⟨cmd⟩ -pgmc ⟨cmd⟩
-pgmdll ⟨cmd⟩ -pgmF ⟨cmd⟩
-pgmi ⟨cmd⟩ -pgmL ⟨cmd⟩ -pgml
⟨cmd⟩ -pgmlc ⟨cmd⟩ -pgmlibtool
⟨cmd⟩ -pgmlo ⟨cmd⟩ -pgmP
⟨cmd⟩ -pgms ⟨cmd⟩ -pgmwindres
⟨cmd⟩
- Phase-specific
options
- -opta ⟨option⟩ -optc ⟨option⟩
-optdll ⟨option⟩ -optF ⟨option⟩
-opti ⟨option⟩ -optL ⟨option⟩
-optl ⟨option⟩ -optlc ⟨option⟩
-optlo ⟨option⟩ -optP ⟨option⟩
-optwindres ⟨option⟩
- Platform-specific
options
- -msse2 -msse4.2
- Compiler
plugins
- -fplugin-opt=⟨module⟩:⟨args⟩
-fplugin=⟨module⟩ -hide-all-plugin-packages
-plugin-package ⟨pkg⟩ -plugin-package-id
⟨pkg-id⟩
- Profiling
- -fno-prof-auto -fno-prof-cafs -fno-prof-count-entries
-fprof-auto -fprof-auto-calls -fprof-auto-exported
-fprof-auto-top -fprof-cafs -prof -ticky
- Program
coverage
- -fhpc
- Recompilation
checking
- -fforce-recomp -fignore-hpc-changes
-fignore-optim-changes
- Redirecting
output
- --exclude-module=⟨file⟩ -ddump-mod-cycles
-dep-makefile ⟨file⟩ -dep-suffix
⟨suffix⟩ -dumpdir ⟨dir⟩ -hcsuf
⟨suffix⟩ -hidir ⟨dir⟩ -hisuf
⟨suffix⟩ -include-pkg-deps -o
⟨file⟩ -odir ⟨dir⟩ -ohi
⟨file⟩ -osuf ⟨suffix⟩ -outputdir
⟨dir⟩ -stubdir ⟨dir⟩
- Temporary
files
- -tmpdir ⟨dir⟩
- Verbosity
options
- -fdiagnostics-color=⟨always|auto|never⟩
-fdiagnostics-show-caret -ferror-spans
-fhide-source-paths -fprint-equality-relations
-fprint-expanded-synonyms -fprint-explicit-coercions
-fprint-explicit-foralls -fprint-explicit-kinds
-fprint-explicit-runtime-rep -fprint-explicit-runtime-reps
-fprint-potential-instances -fprint-typechecker-elaboration
-fprint-unicode-syntax -fshow-hole-constraints
-Rghc-timing -v -v⟨n⟩
- Warnings
- -fdefer-out-of-scope-variables -fdefer-type-errors
-fdefer-typed-holes -fhelpful-errors
-fmax-pmcheck-iterations=⟨n⟩
-fshow-warning-groups -W -w -Wall
-Wall-missed-specialisations -Wamp -Wcompat
-Wcpp-undef -Wdeferred-out-of-scope-variables
-Wdeferred-type-errors -Wdeprecated-flags
-Wdeprecations -Wdodgy-exports
-Wdodgy-foreign-imports -Wdodgy-imports
-Wduplicate-constraints -Wduplicate-exports
-Wempty-enumerations -Werror -Weverything
-Whi-shadowing -Widentities -Wimplicit-prelude
-Wincomplete-patterns -Wincomplete-record-updates
-Wincomplete-uni-patterns -Winline-rule-shadowing
-Wmissed-specialisations -Wmissing-export-lists
-Wmissing-exported-signatures -Wmissing-exported-sigs
-Wmissing-fields -Wmissing-home-modules
-Wmissing-import-lists -Wmissing-local-signatures
-Wmissing-local-sigs -Wmissing-methods
-Wmissing-monadfail-instances
-Wmissing-pattern-synonym-signatures -Wmissing-signatures
-Wmonomorphism-restriction -Wname-shadowing
-Wno-compat -Wnoncanonical-monad-instances
-Wnoncanonical-monadfail-instances
-Wnoncanonical-monoid-instances -Worphans
-Woverflowed-literals -Woverlapping-patterns
-Wpartial-fields -Wpartial-type-signatures
-Wredundant-constraints -Wsafe -Wsemigroup
-Wsimplifiable-class-constraints -Wtabs
-Wtrustworthy-safe -Wtype-defaults -Wtyped-holes
-Wunbanged-strict-patterns -Wunrecognised-pragmas
-Wunrecognised-warning-flags -Wunsafe
-Wunsupported-calling-conventions -Wunsupported-llvm-version
-Wunticked-promoted-constructors -Wunused-binds
-Wunused-do-bind -Wunused-foralls -Wunused-imports
-Wunused-local-binds -Wunused-matches
-Wunused-pattern-binds -Wunused-top-binds
-Wunused-type-patterns -Wwarn -Wwarnings-deprecations
-Wwrong-do-bind
- -dynamic-too
- Build dynamic object files as well as static object files during
compilation
- -fasm
- Use the native code generator
- -fbyte-code
- Generate byte-code
- -fllvm
- Compile using the LLVM code generator
- -fno-code
- Omit code generation
- -fobject-code
- Generate object code
- -fPIC
- Generate position-independent code (where available)
- -fPIE
- Generate code for a position-independent executable (where available)
- -fwrite-interface
- Always write interface files
- -cpp
- Run the C pre-processor on Haskell source files
- -D⟨symbol⟩[=⟨value⟩]
- Define a symbol in the C pre-processor
- -I⟨dir⟩
- Add ⟨dir⟩ to the directory search list for #include
files
- -U⟨symbol⟩
- Undefine a symbol in the C pre-processor
- -i
- Empty the import directory list
- -i⟨dir⟩[:⟨dir⟩]*
- add ⟨dir⟩, ⟨dir2⟩, etc. to import path
- -XAllowAmbiguousTypes
- Allow the user to write ambiguous types, and the type inference engine to
infer them.
- -XApplicativeDo
- Enable Applicative do-notation desugaring
- -XArrows
- Enable arrow notation extension
- -XBangPatterns
- Enable bang patterns.
- -XBinaryLiterals
- Enable support for binary literals.
- -XCApiFFI
- Enable the CAPI calling convention.
- -XConstrainedClassMethods
- Enable constrained class methods.
- -XConstraintKinds
- Enable a kind of constraints.
- -XCPP
- Enable the C preprocessor.
- -XDataKinds
- Enable datatype promotion.
- -XDatatypeContexts
- Allow contexts on data types.
- -XDefaultSignatures
- Enable default signatures.
- -XDeriveAnyClass
- Enable deriving for any class.
- -XDeriveDataTypeable
- Enable deriving for the Data class. Implied by
AutoDeriveTypeable.
- -XDeriveFoldable
- Enable deriving for the Foldable class. Implied by
DeriveTraversable.
- -XDeriveFunctor
- Enable deriving for the Functor class. Implied by
DeriveTraversable.
- -XDeriveGeneric
- Enable deriving for the Generic class.
- -XDeriveLift
- Enable deriving for the Lift class
- -XDeriveTraversable
- Enable deriving for the Traversable class. Implies DeriveFunctor
and DeriveFoldable.
- -XDerivingStrategies
- Enables deriving strategies.
- -XDisambiguateRecordFields
- Enable record field disambiguation. Implied by
RecordWildCards.
- -XDuplicateRecordFields
- Allow definition of record types with identically-named fields.
- -XEmptyCase
- Allow empty case alternatives.
- -XEmptyDataDecls
- Allow definition of empty data types.
- -XEmptyDataDeriving
- Allow deriving instances of standard type classes for empty data
types.
- -XExistentialQuantification
- Enable liberalised type synonyms.
- -XExplicitForAll
- Enable explicit universal quantification. Implied by
ScopedTypeVariables, LiberalTypeSynonyms, RankNTypes
and ExistentialQuantification.
- -XExplicitNamespaces
- Enable using the keyword type to specify the namespace of entries
in imports and exports (explicit-namespaces). Implied by
TypeOperators and TypeFamilies.
- -XExtendedDefaultRules
- Use GHCi's extended default rules in a normal module.
- -XFlexibleContexts
- Enable flexible contexts. Implied by ImplicitParams.
- -XFlexibleInstances
- Enable flexible instances. Implies TypeSynonymInstances. Implied by
ImplicitParams.
- -XForeignFunctionInterface
- Enable foreign function interface.
- -XFunctionalDependencies
- Enable functional dependencies. Implies MultiParamTypeClasses.
- -XGADTs
- Enable generalised algebraic data types. Implies GADTSyntax and
MonoLocalBinds.
- -XGADTSyntax
- Enable generalised algebraic data type syntax.
- -XGeneralisedNewtypeDeriving
- Enable newtype deriving.
- -XGeneralizedNewtypeDeriving
- Enable newtype deriving.
- -XHexFloatLiterals
- Enable support for hexadecimal floating point literals.
- -XImplicitParams
- Enable Implicit Parameters. Implies FlexibleContexts and
FlexibleInstances.
- -XImpredicativeTypes
- Enable impredicative types. Implies RankNTypes.
- -XIncoherentInstances
- Enable incoherent instances. Implies OverlappingInstances.
- -XInstanceSigs
- Enable instance signatures.
- -XInterruptibleFFI
- Enable interruptible FFI.
- -XKindSignatures
- Enable kind signatures. Implied by TypeFamilies and
PolyKinds.
- -XLambdaCase
- Enable lambda-case expressions.
- -XLiberalTypeSynonyms
- Enable liberalised type synonyms.
- -XMagicHash
- Allow # as a postfix modifier on identifiers.
- -XMonadComprehensions
- Enable monad comprehensions.
- -XMonadFailDesugaring
- Enable monadfail desugaring.
- -XMonoLocalBinds
- Enable do not generalise local bindings. Implied by TypeFamilies
and GADTs.
- -XMultiParamTypeClasses
- Enable multi parameter type classes. Implied by
FunctionalDependencies.
- -XMultiWayIf
- Enable multi-way if-expressions.
- -XNamedFieldPuns
- Enable record puns.
- -XNamedWildCards
- Enable named wildcards.
- -XNegativeLiterals
- Enable support for negative literals.
- -XNoImplicitPrelude
- Don't implicitly import Prelude. Implied by
RebindableSyntax.
- -XNoMonomorphismRestriction
- Disable the monomorphism restriction.
- -XNoPatternGuards
- Disable pattern guards. Implied by Haskell98.
- -XNoTraditionalRecordSyntax
- Disable support for traditional record syntax (as supported by Haskell 98)
C {f = x}
- -XNPlusKPatterns
- Enable support for n+k patterns. Implied by Haskell98.
- -XNullaryTypeClasses
- Deprecated, does nothing. nullary (no parameter) type classes are now
enabled using MultiParamTypeClasses.
- -XNumDecimals
- Enable support for 'fractional' integer literals.
- -XOverlappingInstances
- Enable overlapping instances.
- -XOverloadedLabels
- Enable overloaded labels.
- -XOverloadedLists
- Enable overloaded lists.
- -XOverloadedStrings
- Enable overloaded string literals.
- -XPackageImports
- Enable package-qualified imports.
- -XParallelListComp
- Enable parallel list comprehensions. Implied by
ParallelArrays.
- -XPartialTypeSignatures
- Enable partial type signatures.
- -XPatternSynonyms
- Enable pattern synonyms.
- -XPolyKinds
- Enable kind polymorphism. Implies KindSignatures.
- -XPostfixOperators
- Enable postfix operators.
- -XQuasiQuotes
- Enable quasiquotation.
- -XRank2Types
- Enable rank-2 types. Synonym for RankNTypes.
- -XRankNTypes
- Enable rank-N types. Implied by ImpredicativeTypes.
- -XRebindableSyntax
- Employ rebindable syntax. Implies NoImplicitPrelude.
- -XRecordWildCards
- Enable record wildcards. Implies DisambiguateRecordFields.
- -XRecursiveDo
- Enable recursive do (mdo) notation.
- -XRoleAnnotations
- Enable role annotations.
- -XSafe
- Enable the Safe Haskell Safe mode.
- -XScopedTypeVariables
- Enable lexically-scoped type variables.
- -XStandaloneDeriving
- Enable standalone deriving.
- -XStaticPointers
- Enable static pointers.
- -XStrict
- Make bindings in the current module strict by default.
- -XStrictData
- Enable default strict datatype fields.
- -XTemplateHaskell
- Enable Template Haskell.
- -XTemplateHaskellQuotes
- Enable quotation subset of Template Haskell.
- -XTransformListComp
- Enable generalised list comprehensions.
- -XTrustworthy
- Enable the Safe Haskell Trustworthy mode.
- -XTupleSections
- Enable tuple sections.
- -XTypeApplications
- Enable type application syntax.
- -XTypeFamilies
- Enable type families. Implies ExplicitNamespaces,
KindSignatures, and MonoLocalBinds.
- -XTypeFamilyDependencies
- Enable injective type families. Implies TypeFamilies.
- -XTypeInType
- Allow kinds to be used as types, including explicit kind variable
quantification, higher-rank kinds, kind synonyms, and kind families.
Implies DataKinds, KindSignatures, and
PolyKinds.
- -XTypeOperators
- Enable type operators. Implies ExplicitNamespaces.
- -XTypeSynonymInstances
- Enable type synonyms in instance heads. Implied by
FlexibleInstances.
- -XUnboxedSums
- Enable unboxed sums.
- -XUnboxedTuples
- Enable the use of unboxed tuple syntax.
- -XUndecidableInstances
- Enable undecidable instances.
- -XUndecidableSuperClasses
- Allow all superclass constraints, including those that may result in
non-termination of the typechecker.
- -XUnicodeSyntax
- Enable unicode syntax.
- -XUnsafe
- Enable Safe Haskell Unsafe mode.
- -XViewPatterns
- Enable view patterns.
- -c
- Stop after generating object (.o) file
- -debug
- Use the debugging runtime
- -dylib-install-name
⟨path⟩
- Set the install name (via -install_name passed to Apple's linker),
specifying the full install path of the library file. Any libraries or
executables that link with it later will pick up that path as their
runtime search location for it. (Darwin/OS X only)
- -dynamic
- Build dynamically-linked object files and executables
- -dynload
- Selects one of a number of modes for finding shared libraries at
runtime.
- -eventlog
- Enable runtime event tracing
- -fno-embed-manifest
- Do not embed the manifest in the executable (Windows only)
- -fno-gen-manifest
- Do not generate a manifest file (Windows only)
- -fno-shared-implib
- Don't generate an import library for a DLL (Windows only)
- -framework
⟨name⟩
- On Darwin/OS X/iOS only, link in the framework ⟨name⟩. This
option corresponds to the -framework option for Apple's
Linker.
- -framework-path
⟨dir⟩
- On Darwin/OS X/iOS only, add ⟨dir⟩ to the list of
directories searched for frameworks. This option corresponds to the
-F option for Apple's Linker.
- -fwhole-archive-hs-libs
- When linking a binary executable, this inserts the flag
-Wl,--whole-archive before any -l flags for Haskell
libraries, and -Wl,--no-whole-archive afterwards
- -L
⟨dir⟩
- Add ⟨dir⟩ to the list of directories searched for
libraries
- -l
⟨lib⟩
- Link in library ⟨lib⟩
- -main-is
⟨thing⟩
- Set main module and function
- -no-hs-main
- Don't assume this program contains main
- -no-rtsopts-suggestions
- Don't print RTS suggestions about linking with
-rtsopts[=⟨none|some|all⟩].
- -package
⟨name⟩
- Expose package ⟨pkg⟩
- -pie
- Instruct the linker to produce a position-independent executable.
- -rdynamic
- This instructs the linker to add all symbols, not only used ones, to the
dynamic symbol table. Currently Linux and Windows/MinGW32 only. This is
equivalent to using -optl -rdynamic on Linux, and -optl
-export-all-symbols on Windows.
- -rtsopts[=⟨none|some|all⟩]
- Control whether the RTS behaviour can be tweaked via command-line flags
and the GHCRTS environment variable. Using none means no RTS
flags can be given; some means only a minimum of safe options can
be given (the default), and all (or no argument at all) means that
all RTS flags are permitted.
- -shared
- Generate a shared library (as opposed to an executable)
- -split-objs
- Split objects (for libraries)
- -split-sections
- Split sections for link-time dead-code stripping
- -static
- Use static Haskell libraries
- -staticlib
- Generate a standalone static library (as opposed to an executable). This
is useful when cross compiling. The library together with all its
dependencies ends up in in a single static library that can be linked
against.
- -threaded
- Use the threaded runtime
- -with-rtsopts=⟨opts⟩
- Set the default RTS options to ⟨opts⟩.
- --frontend
⟨module⟩
- run GHC with the given frontend plugin; see frontend_plugins for
details.
- --help
- Display help
- --info
- display information about the compiler
- --interactive
- Interactive mode - normally used by just running ghci; see ghci for
details.
- --make
- Build a multi-module Haskell program, automatically figuring out
dependencies. Likely to be much easier, and faster, than using
make; see make-mode for details.
- --mk-dll
- DLL-creation mode (Windows only)
- --numeric-version
- display GHC version (numeric only)
- --print-libdir
- display GHC library directory
- --show-iface
⟨file⟩
- display the contents of an interface file.
- --show-options
- display the supported command line options
- --supported-extensions
- display the supported language extensions
- --version
- display GHC version
- -e
⟨expr⟩
- Evaluate expr; see eval-mode for details.
- -M
- generate dependency information suitable for use in a Makefile; see
makefile-dependencies for details.
- -O
- Enable level 1 optimisations
- -O0
- Disable optimisations (default)
- -O2
- Enable level 2 optimisations
- -Odph
- Enable level 2 optimisations, set -fmax-simplifier-iterations=20
and -fsimplifier-phases=3.
- -C
- Stop after generating C (.hc file)
- -c
- Stop after generating object (.o) file
- -E
- Stop after preprocessing (.hspp file)
- -F
- Enable the use of a pre-processor (set with -pgmF
⟨cmd⟩)
- -S
- Stop after generating assembly (.s file)
- -x
⟨suffix⟩
- Override default behaviour for source files
Platform-specific options
- -msse2
- (x86 only) Use SSE2 for floating-point operations
- -msse4.2
- (x86 only) Use SSE4.2 for floating-point operations
- -fhpc
- Turn on Haskell program coverage instrumentation
- -fforce-recomp
- Turn off recompilation checking. This is implied by any -ddump-X
option when compiling a single file (i.e. when using -c).
- -fignore-hpc-changes
- Do not recompile modules just to match changes to HPC flags. This is
especially useful for avoiding recompilation when using GHCi, and is
enabled by default for GHCi.
- -fignore-optim-changes
- Do not recompile modules just to match changes to optimisation flags. This
is especially useful for avoiding recompilation when using GHCi, and is
enabled by default for GHCi.
- -fdefer-out-of-scope-variables
- Convert variable out of scope variables errors into warnings. Implied by
-fdefer-type-errors. See also
-Wdeferred-out-of-scope-variables.
- -fdefer-type-errors
- Turn type errors into warnings, deferring the error until runtime. Implies
-fdefer-typed-holes and -fdefer-out-of-scope-variables. See
also -Wdeferred-type-errors
- -fdefer-typed-holes
- Convert typed hole errors into warnings, deferring the error until
runtime. Implied by -fdefer-type-errors. See also
-Wtyped-holes.
- -fhelpful-errors
- Make suggestions for mis-spelled names.
- -fmax-pmcheck-iterations=⟨n⟩
- the iteration limit for the pattern match checker
- -fshow-warning-groups
- show which group an emitted warning belongs to.
- -W
- enable normal warnings
- -w
- disable all warnings
- -Wall
- enable almost all warnings (details in options-sanity)
- -Wall-missed-specialisations
- warn when specialisation of any overloaded function fails.
- -Wamp
- (deprecated) warn on definitions conflicting with the
Applicative-Monad Proposal (AMP)
- -Wcompat
- enable future compatibility warnings (details in options-sanity)
- -Wcpp-undef
- warn on uses of the #if directive on undefined identifiers
- -Wdeferred-out-of-scope-variables
- Report warnings when variable out-of-scope errors are deferred until
runtime. See -fdefer-out-of-scope-variables.
- -Wdeferred-type-errors
- Report warnings when deferred type errors are enabled. This option is
enabled by default. See -fdefer-type-errors.
- -Wdeprecated-flags
- warn about uses of commandline flags that are deprecated
- -Wdeprecations
- warn about uses of functions & types that have warnings or deprecated
pragmas. Alias for -Wwarnings-deprecations
- -Wdodgy-exports
- warn about dodgy exports
- -Wdodgy-foreign-imports
- warn about dodgy foreign imports
- -Wdodgy-imports
- warn about dodgy imports
- -Wduplicate-constraints
- warn when a constraint appears duplicated in a type signature
- -Wduplicate-exports
- warn when an entity is exported multiple times
- -Wempty-enumerations
- warn about enumerations that are empty
- -Werror
- make warnings fatal
- -Weverything
- enable all warnings supported by GHC
- -Whi-shadowing
- warn when a .hi file in the current directory shadows a
library
- -Widentities
- warn about uses of Prelude numeric conversions that are probably the
identity (and hence could be omitted)
- -Wimplicit-prelude
- warn when the Prelude is implicitly imported
- -Wincomplete-patterns
- warn when a pattern match could fail
- -Wincomplete-record-updates
- warn when a record update could fail
- -Wincomplete-uni-patterns
- warn when a pattern match in a lambda expression or pattern binding could
fail
- -Winline-rule-shadowing
- Warn if a rewrite RULE might fail to fire because the function might be
inlined before the rule has a chance to fire. See rules-inline.
- -Wmissed-specialisations
- warn when specialisation of an imported, overloaded function fails.
- -Wmissing-export-lists
- warn when a module declaration does not explicitly list all exports
- -Wmissing-exported-signatures
- warn about top-level functions without signatures, only if they are
exported. takes precedence over -Wmissing-signatures
- -Wmissing-exported-sigs
- (deprecated) warn about top-level functions without signatures,
only if they are exported. takes precedence over -Wmissing-signatures
- -Wmissing-fields
- warn when fields of a record are uninitialised
- -Wmissing-home-modules
- warn when encountering a home module imported, but not listed on the
command line. Useful for cabal to ensure GHC won't pick up modules, not
listed neither in exposed-modules, nor in
other-modules.
- -Wmissing-import-lists
- warn when an import declaration does not explicitly list all the names
brought into scope
- -Wmissing-local-signatures
- warn about polymorphic local bindings without signatures
- -Wmissing-local-sigs
- (deprecated) warn about polymorphic local bindings without
signatures
- -Wmissing-methods
- warn when class methods are undefined
- -Wmissing-monadfail-instances
- Warn when a failable pattern is used in a do-block that does not have a
MonadFail instance.
- -Wmissing-pattern-synonym-signatures
- warn when pattern synonyms do not have type signatures
- -Wmissing-signatures
- warn about top-level functions without signatures
- -Wmonomorphism-restriction
- warn when the Monomorphism Restriction is applied
- -Wname-shadowing
- warn when names are shadowed
- -Wno-compat
- Disables all warnings enabled by -Wcompat.
- -Wnoncanonical-monad-instances
- warn when Applicative or Monad instances have noncanonical
definitions of return, pure, (>>), or
(*>). See flag description in options-sanity for more
details.
- -Wnoncanonical-monadfail-instances
- warn when Monad or MonadFail instances have noncanonical
definitions of fail. See flag description in options-sanity for
more details.
- -Wnoncanonical-monoid-instances
- warn when Semigroup or Monoid instances have noncanonical
definitions of (<>) or mappend. See flag description
in options-sanity for more details.
- -Worphans
- warn when the module contains orphan instance declarations or rewrite
rules
- -Woverflowed-literals
- warn about literals that will overflow their type
- -Woverlapping-patterns
- warn about overlapping patterns
- -Wpartial-fields
- warn when defining a partial record field.
- -Wpartial-type-signatures
- warn about holes in partial type signatures when
-XPartialTypeSignatures is enabled. Not applicable when
-XPartialTypesignatures is not enabled, in which case errors are
generated for such holes. See partial-type-signatures.
- -Wredundant-constraints
- Have the compiler warn about redundant constraints in type
signatures.
- -Wsafe
- warn if the module being compiled is regarded to be safe.
- -Wsemigroup
- warn when a Monoid is not Semigroup, and on non-
Semigroup definitions of (<>)?
- -Wsimplifiable-class-constraints
- 2arn about class constraints in a type signature that can be simplified
using a top-level instance declaration.
- -Wtabs
- warn if there are tabs in the source file
- -Wtrustworthy-safe
- warn if the module being compiled is marked as Trustworthy but it
could instead be marked as Safe, a more informative bound.
- -Wtype-defaults
- warn when defaulting happens
- -Wtyped-holes
- Report warnings when typed hole errors are deferred until runtime. See
-fdefer-typed-holes.
- -Wunbanged-strict-patterns
- warn on pattern bind of unlifted variable that is neither bare nor
banged
- -Wunrecognised-pragmas
- warn about uses of pragmas that GHC doesn't recognise
- -Wunrecognised-warning-flags
- throw a warning when an unreconised -W... flag is encountered on
the command line.
- -Wunsafe
- warn if the module being compiled is regarded to be unsafe. See
safe-haskell
- -Wunsupported-calling-conventions
- warn about use of an unsupported calling convention
- -Wunsupported-llvm-version
- Warn when using -fllvm with an unsupported version of LLVM.
- -Wunticked-promoted-constructors
- warn if promoted constructors are not ticked
- -Wunused-binds
- warn about bindings that are unused. Alias for -Wunused-top-binds,
-Wunused-local-binds and -Wunused-pattern-binds
- -Wunused-do-bind
- warn about do bindings that appear to throw away values of types other
than ()
- -Wunused-foralls
- warn about type variables in user-written forall\s that are
unused
- -Wunused-imports
- warn about unnecessary imports
- -Wunused-local-binds
- warn about local bindings that are unused
- -Wunused-matches
- warn about variables in patterns that aren't used
- -Wunused-pattern-binds
- warn about pattern match bindings that are unused
- -Wunused-top-binds
- warn about top-level bindings that are unused
- -Wunused-type-patterns
- warn about unused type variables which arise from patterns in type family
and data family instances
- -Wwarn
- make warnings non-fatal
- -Wwarnings-deprecations
- warn about uses of functions & types that have warnings or deprecated
pragmas
- -Wwrong-do-bind
- warn about do bindings that appear to throw away monadic values that you
should have bound instead
Copyright 2015. The University Court of the University of Glasgow.
All rights reserved.