diff --git a/pandoc.cabal b/pandoc.cabal
index 12fa0f3e7..78f96ef4e 100644
--- a/pandoc.cabal
+++ b/pandoc.cabal
@@ -630,7 +630,6 @@ executable pandoc
      hs-source-dirs: prelude
      other-modules:  Prelude
      build-depends:  base-compat >= 0.9
-  ghc-options:   -rtsopts -with-rtsopts=-K16m -Wall -fno-warn-unused-do-bind -threaded
   if flag(static)
     ld-options:     -static
   default-language: Haskell2010
@@ -639,6 +638,18 @@ executable pandoc
   main-is:         pandoc.hs
   buildable:       True
   other-modules:   Paths_pandoc
+  ghc-options:     -rtsopts -with-rtsopts=-K16m -threaded
+                   -Wall -fno-warn-unused-do-bind
+                   -Wincomplete-record-updates
+                   -Wnoncanonical-monad-instances
+                   -Wnoncanonical-monadfail-instances
+  if impl(ghc >= 8.2)
+    ghc-options:     -Wcpp-undef
+  if impl(ghc >= 8.4)
+    ghc-options:     -Wincomplete-uni-patterns
+                     -Widentities
+                     -Werror=missing-home-modules
+                     -fhide-source-paths
 
 executable trypandoc
   main-is:         trypandoc.hs
@@ -655,6 +666,18 @@ executable trypandoc
      hs-source-dirs: prelude
      other-modules:  Prelude
      build-depends:  base-compat >= 0.9
+  ghc-options:     -rtsopts -with-rtsopts=-K16m -threaded
+                   -Wall -fno-warn-unused-do-bind
+                   -Wincomplete-record-updates
+                   -Wnoncanonical-monad-instances
+                   -Wnoncanonical-monadfail-instances
+  if impl(ghc >= 8.2)
+    ghc-options:     -Wcpp-undef
+  if impl(ghc >= 8.4)
+    ghc-options:     -Wincomplete-uni-patterns
+                     -Widentities
+                     -Werror=missing-home-modules
+                     -fhide-source-paths
 
 benchmark weigh-pandoc
   type:            exitcode-stdio-1.0
@@ -669,9 +692,21 @@ benchmark weigh-pandoc
      hs-source-dirs: prelude
      other-modules:  Prelude
      build-depends:  base-compat >= 0.9
-  ghc-options:   -rtsopts -Wall -fno-warn-unused-do-bind -threaded
   default-language: Haskell2010
   other-extensions: NoImplicitPrelude
+  ghc-options:     -rtsopts -with-rtsopts=-K16m -threaded
+                   -Wall -fno-warn-unused-do-bind
+                   -Wincomplete-record-updates
+                   -Wnoncanonical-monad-instances
+                   -Wnoncanonical-monadfail-instances
+  if impl(ghc >= 8.2)
+    ghc-options:     -Wcpp-undef
+  if impl(ghc >= 8.4)
+    ghc-options:     -Wincomplete-uni-patterns
+                     -Widentities
+                     -Werror=missing-home-modules
+                     -fhide-source-paths
+
 
 test-suite test-pandoc
   type:           exitcode-stdio-1.0
@@ -759,9 +794,21 @@ test-suite test-pandoc
                   Tests.Writers.OOXML
   if os(windows)
     cpp-options:      -D_WINDOWS
-  ghc-options:  -rtsopts -Wall -fno-warn-unused-do-bind -threaded
   default-language: Haskell2010
   other-extensions: NoImplicitPrelude
+  ghc-options:     -rtsopts -with-rtsopts=-K16m -threaded
+                   -Wall -fno-warn-unused-do-bind
+                   -Wincomplete-record-updates
+                   -Wnoncanonical-monad-instances
+                   -Wnoncanonical-monadfail-instances
+  if impl(ghc >= 8.2)
+    ghc-options:     -Wcpp-undef
+  if impl(ghc >= 8.4)
+    ghc-options:     -Wincomplete-uni-patterns
+                     -Widentities
+                     -Werror=missing-home-modules
+                     -fhide-source-paths
+
 
 benchmark benchmark-pandoc
   type:            exitcode-stdio-1.0
@@ -777,6 +824,18 @@ benchmark benchmark-pandoc
      hs-source-dirs: prelude
      other-modules:  Prelude
      build-depends:  base-compat >= 0.9
-  ghc-options:   -rtsopts -Wall -fno-warn-unused-do-bind -threaded
   default-language: Haskell2010
   other-extensions: NoImplicitPrelude
+  ghc-options:     -rtsopts -with-rtsopts=-K16m -threaded
+                   -Wall -fno-warn-unused-do-bind
+                   -Wincomplete-record-updates
+                   -Wnoncanonical-monad-instances
+                   -Wnoncanonical-monadfail-instances
+  if impl(ghc >= 8.2)
+    ghc-options:     -Wcpp-undef
+  if impl(ghc >= 8.4)
+    ghc-options:     -Wincomplete-uni-patterns
+                     -Widentities
+                     -Werror=missing-home-modules
+                     -fhide-source-paths
+