GHC's behaviour is controlled by options, which for historical reasons are also sometimes referred to as command-line flags or arguments. Options can be specified in three ways:
An invocation of GHC takes the following form:
ghc [argument...]
Command-line arguments are either options or file names.
Command-line options begin with -.
      They may not be grouped:
      -vO is different from -v -O.
      Options need not precede filenames: e.g., ghc *.o -o
      foo.  All options are processed and then applied to
      all files; you cannot, for example, invoke ghc -c -O1
      Foo.hs -O2 Bar.hs to apply different optimisation
      levels to the files Foo.hs and
      Bar.hs.
Sometimes it is useful to make the connection between a
      source file and the command-line options it requires quite
      tight. For instance, if a Haskell source file deliberately
        uses name shadowing, it should be compiled with  the
      -fno-warn-name-shadowing option.  Rather than maintaining
      the list of per-file options in a Makefile,
      it is possible to do this directly in the source file using the
      OPTIONS_GHC pragma :
{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
module X where
...
OPTIONS_GHC is a file-header pragma
      (see Section 7.18, “Pragmas”).
Only dynamic flags can be used in an OPTIONS_GHC pragma
      (see Section 4.3, “Static, Dynamic, and Mode options”).
Note that your command shell does not
      get to the source file options, they are just included literally
      in the array of command-line arguments the compiler
      maintains internally, so you'll be desperately disappointed if
      you try to glob etc. inside OPTIONS_GHC.
NOTE: the contents of OPTIONS_GHC are appended to the command-line options, so options given in the source file override those given on the command-line.
It is not recommended to move all the contents of your
      Makefiles into your source files, but in some circumstances, the
      OPTIONS_GHC pragma is the Right Thing. (If you
      use -keep-hc-file and have OPTION flags in
      your module, the OPTIONS_GHC will get put into the generated .hc
      file).
Options may also be modified from within GHCi, using the
      :set command.  See Section 2.8, “The :set and :seti commands”
      for more details.