Re-export `<$>` from Prelude (#10113)
authorHerbert Valerio Riedel <hvr@gnu.org>
Sat, 7 Mar 2015 10:10:34 +0000 (11:10 +0100)
committerHerbert Valerio Riedel <hvr@gnu.org>
Sat, 7 Mar 2015 10:10:53 +0000 (11:10 +0100)
Whether to re-export the `<$>` non-method operator from `Prelude` wasn't
explicitly covered in the original AMP proposal[1], but it turns out that
not doing so forces most code that makes use of applicatives to import
`Data.Functor` or `Control.Applicative` just to get that operator into
scope.  To this end, it was proposed to add `<$>` to Prelude as well[2].

The down-side is that this increases the amount of redundant-import
warnings triggered, as well as the relatively minor issue of stealing
the `<$>` operator from the default namespace for good (although at this
point `<$>` is supposed to be ubiquitous anyway due to `Applicative`
being implicitly required into the next Haskell Report)

 [1]: https://wiki.haskell.org/Functor-Applicative-Monad_Proposal
 [2]: http://thread.gmane.org/gmane.comp.lang.haskell.libraries/24161

Reviewed By: austin, ekmett

Differential Revision: https://phabricator.haskell.org/D680

18 files changed:
compiler/hsSyn/HsBinds.hs
compiler/parser/RdrHsSyn.hs
compiler/typecheck/TcEvidence.hs
compiler/typecheck/TcGenDeriv.hs
compiler/types/Coercion.hs
compiler/utils/MonadUtils.hs
compiler/utils/Pair.hs
compiler/vectorise/Vectorise/Convert.hs
compiler/vectorise/Vectorise/Exp.hs
compiler/vectorise/Vectorise/Type/Type.hs
compiler/vectorise/Vectorise/Utils/Hoisting.hs
compiler/vectorise/Vectorise/Var.hs
libraries/base/Prelude.hs
testsuite/tests/parser/should_compile/T7476/T7476.hs
testsuite/tests/parser/should_compile/T7476/T7476.stdout
testsuite/tests/rename/should_fail/T2993.hs
testsuite/tests/rename/should_fail/T2993.stderr
testsuite/tests/th/T10019.stdout

index 1d31639..89ec1b7 100644 (file)
@@ -47,8 +47,6 @@ import Data.Foldable ( Foldable(..) )
 import Data.Traversable ( Traversable(..) )
 import Data.Monoid ( mappend )
 import Control.Applicative hiding (empty)
-#else
-import Control.Applicative ((<$>))
 #endif
 
 {-
index 48515aa..6bf8bc3 100644 (file)
@@ -91,7 +91,9 @@ import Maybes
 import Util
 import ApiAnnotation
 
+#if __GLASGOW_HASKELL__ < 709
 import Control.Applicative ((<$>))
+#endif
 import Control.Monad
 
 import Text.ParserCombinators.ReadP as ReadP
index 372c70a..e549b1e 100644 (file)
@@ -49,8 +49,8 @@ import Name
 import Util
 import Bag
 import Pair
-import Control.Applicative
 #if __GLASGOW_HASKELL__ < 709
+import Control.Applicative
 import Data.Traversable (traverse, sequenceA)
 #endif
 import qualified Data.Data as Data
index af76514..57718b0 100644 (file)
@@ -58,7 +58,9 @@ import Module
 import State
 import Util
 import Var
+#if __GLASGOW_HASKELL__ < 709
 import MonadUtils
+#endif
 import Outputable
 import Lexeme
 import FastString
index 9562362..4be4e92 100644 (file)
@@ -101,8 +101,8 @@ import Unique
 import Pair
 import SrcLoc
 import PrelNames        ( funTyConKey, eqPrimTyConKey, eqReprPrimTyConKey )
-import Control.Applicative hiding ( empty )
 #if __GLASGOW_HASKELL__ < 709
+import Control.Applicative hiding ( empty )
 import Data.Traversable (traverse, sequenceA)
 #endif
 import FastString
index 0850ff4..e20178c 100644 (file)
@@ -34,6 +34,7 @@ import Control.Applicative
 import Control.Monad
 import Control.Monad.Fix
 import Control.Monad.IO.Class
+import Prelude -- avoid redundant import warning due to AMP
 
 -------------------------------------------------------------------------------
 -- Lift combinators
index f2d39de..b33ccba 100644 (file)
@@ -10,8 +10,8 @@ module Pair ( Pair(..), unPair, toPair, swap ) where
 #include "HsVersions.h"
 
 import Outputable
-import Control.Applicative
 #if __GLASGOW_HASKELL__ < 709
+import Control.Applicative
 import Data.Foldable
 import Data.Monoid
 import Data.Traversable
index bbd0c5a..84797b1 100644 (file)
@@ -16,7 +16,7 @@ import FastString
 import Outputable
 
 import Control.Applicative
-
+import Prelude -- avoid redundant import warning due to AMP
 
 -- |Convert a vectorised expression such that it computes the non-vectorised equivalent of its
 -- value.
index f975903..ae7483a 100644 (file)
@@ -44,7 +44,9 @@ import Outputable
 import FastString
 import DynFlags
 import Util
+#if __GLASGOW_HASKELL__ < 709
 import MonadUtils
+#endif
 
 import Control.Monad
 import Data.Maybe
index ebb09e6..77b5b17 100644 (file)
@@ -17,7 +17,7 @@ import TyCon
 import Control.Monad
 import Control.Applicative
 import Data.Maybe
-
+import Prelude -- avoid redundant import warning due to AMP
 
 -- |Vectorise a type constructor. Unless there is a vectorised version (stripped of embedded
 -- parallel arrays), the vectorised version is the same as the original.
index 7275bb2..105c821 100644 (file)
@@ -25,7 +25,7 @@ import BasicTypes  (Arity)
 import FastString
 import Control.Monad
 import Control.Applicative
-
+import Prelude -- avoid redundant import warning due to AMP
 
 -- Inline ---------------------------------------------------------------------
 
index a299731..09daf76 100644 (file)
@@ -24,7 +24,7 @@ import VarEnv
 import Id
 import FastString
 import Control.Applicative
-
+import Prelude -- avoid redundant import warning due to AMP
 
 -- Binders ----------------------------------------------------------------------------------------
 
index d1dc1a4..8e275aa 100644 (file)
@@ -70,7 +70,7 @@ module Prelude (
     Monoid(mempty, mappend, mconcat),
 
     -- ** Monads and functors
-    Functor(fmap),
+    Functor(fmap), (<$>),
     Applicative(pure, (<*>), (*>), (<*)),
     Monad((>>=), (>>), return, fail),
     mapM_, sequence_, (=<<),
@@ -158,6 +158,7 @@ import System.IO.Error
 import Data.List
 import Data.Either
 import Data.Foldable    ( Foldable(..) )
+import Data.Functor     ( (<$>) )
 import Data.Maybe
 import Data.Traversable ( Traversable(..) )
 import Data.Tuple
index 34ac453..48f2f1e 100644 (file)
@@ -1,2 +1,2 @@
 import Control.Applicative
-main = show <$> pure 1 >>= print
+main = (pure 1 >>= print) <**> pure show
index 99f2a89..d5de095 100644 (file)
@@ -4,5 +4,5 @@
 
 module T2993 where
 
-foo b a = a <$> b . b
+foo b a = a <**> b . b
 
index 907a034..144ebff 100644 (file)
@@ -1,4 +1,4 @@
 
 T2993.hs:7:13:
-    Not in scope: ‘<$>’
+    Not in scope: ‘<**>’
     Perhaps you meant ‘<*>’ (imported from Prelude)
index 777ff3b..350338c 100644 (file)
@@ -1 +1 @@
-"DataConI Ghci1.Some (ForallT [KindedTV a_1627391548 StarT] [] (AppT (AppT ArrowT (VarT a_1627391548)) (AppT (ConT Ghci1.Option) (VarT a_1627391548)))) Ghci1.Option (Fixity 9 InfixL)"
+"DataConI Ghci1.Some (ForallT [KindedTV a_1627391549 StarT] [] (AppT (AppT ArrowT (VarT a_1627391549)) (AppT (ConT Ghci1.Option) (VarT a_1627391549)))) Ghci1.Option (Fixity 9 InfixL)"