From 4c730f58ad4d1019568a2adc3933b9af0954c8c6 Mon Sep 17 00:00:00 2001
From: Herbert Valerio Riedel <hvr@gnu.org>
Date: Mon, 26 Sep 2016 00:05:46 +0200
Subject: [PATCH] Introduce `Distribution.Compat.Prelude.Internal` + WARNING
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This unexposes `Distribution.Compat.Prelude` again, and adds
an exposed `.Internal` module which reexports the `.Prelude` module with
an attached module-level `WARNING` pragma.

This way users are discouraged to use this in `Setup.hs` files as they'd
see compile warning like:

    Foo.hs:19:1-55: warning: [-Wdeprecations]
      Module ‘Distribution.Compat.Prelude.Internal’:
        This modules' API is not stable. Use at your own risk, or better yet, use @base-compat@!

In `cabal-install` we import the `.Internal` module exactly once, and
use -Wno-deprecations to suppress that the warning of that single
import.
---
 Cabal/Cabal.cabal                                  |  3 ++-
 Cabal/Distribution/Compat/Prelude/Internal.hs      | 14 ++++++++++++++
 .../Distribution/Client/Compat/Prelude.hs          |  7 +++++--
 3 files changed, 21 insertions(+), 3 deletions(-)
 create mode 100644 Cabal/Distribution/Compat/Prelude/Internal.hs

diff --git a/Cabal/Cabal.cabal b/Cabal/Cabal.cabal
index 6722545d13..2a0f4aef37 100644
--- a/Cabal/Cabal.cabal
+++ b/Cabal/Cabal.cabal
@@ -315,7 +315,7 @@ library
     Distribution.Compat.Exception
     Distribution.Compat.Graph
     Distribution.Compat.Internal.TempFile
-    Distribution.Compat.Prelude
+    Distribution.Compat.Prelude.Internal
     Distribution.Compat.ReadP
     Distribution.Compat.Semigroup
     Distribution.Compat.Stack
@@ -419,6 +419,7 @@ library
     Distribution.Compat.CopyFile
     Distribution.Compat.GetShortPathName
     Distribution.Compat.MonadFail
+    Distribution.Compat.Prelude
     Distribution.GetOpt
     Distribution.Lex
     Distribution.Simple.GHC.Internal
diff --git a/Cabal/Distribution/Compat/Prelude/Internal.hs b/Cabal/Distribution/Compat/Prelude/Internal.hs
new file mode 100644
index 0000000000..b3f998d331
--- /dev/null
+++ b/Cabal/Distribution/Compat/Prelude/Internal.hs
@@ -0,0 +1,14 @@
+-- | This module re-exports the non-exposed
+-- "Distribution.Compat.Prelude" module for
+-- reuse by @cabal-install@'s
+-- "Distribution.Client.Compat.Prelude" module.
+--
+-- It is highly discouraged to rely on this module
+-- for @Setup.hs@ scripts since its API is /not/
+-- stable.
+module Distribution.Compat.Prelude.Internal
+    {-# WARNING "This modules' API is not stable. Use at your own risk, or better yet, use @base-compat@!" #-}
+    ( module Distribution.Compat.Prelude
+    ) where
+
+import Distribution.Compat.Prelude
diff --git a/cabal-install/Distribution/Client/Compat/Prelude.hs b/cabal-install/Distribution/Client/Compat/Prelude.hs
index 6b7413035a..1b233af4e4 100644
--- a/cabal-install/Distribution/Client/Compat/Prelude.hs
+++ b/cabal-install/Distribution/Client/Compat/Prelude.hs
@@ -1,5 +1,8 @@
 {-# LANGUAGE CPP #-}
 
+-- to suppress WARNING in "Distribution.Compat.Prelude.Internal"
+{-# OPTIONS_GHC -fno-warn-deprecations #-}
+
 -- | This module does two things:
 --
 -- * Acts as a compatiblity layer, like @base-compat@.
@@ -10,13 +13,13 @@
 -- this module re-exports)
 --
 module Distribution.Client.Compat.Prelude
-  ( module Distribution.Compat.Prelude
+  ( module Distribution.Compat.Prelude.Internal
   , Prelude.IO
   , readMaybe
   ) where
 
 import Prelude (IO)
-import Distribution.Compat.Prelude hiding (IO)
+import Distribution.Compat.Prelude.Internal hiding (IO)
 
 #if MIN_VERSION_base(4,6,0)
 import Text.Read
-- 
GitLab