summaryrefslogtreecommitdiff
path: root/compiler/GHC/Tc
diff options
context:
space:
mode:
authorVladislav Zavialov <vlad.z.4096@gmail.com>2020-10-18 15:24:31 +0300
committerVladislav Zavialov <vlad.z.4096@gmail.com>2022-03-15 18:34:38 +0300
commitab618309069bb47645f33cd1b198ace46e27abb9 (patch)
tree0a388d085a19b16da85dc91cc958578c9a033399 /compiler/GHC/Tc
parent8ff32124c8cd37050f3dc7cbb32b8d41711ebcaf (diff)
downloadhaskell-ab618309069bb47645f33cd1b198ace46e27abb9.tar.gz
Export (~) from Data.Type.Equality (#18862)wip/eqtycon-rn
* Users can define their own (~) type operator * Haddock can display documentation for the built-in (~) * New transitional warnings implemented: -Wtype-equality-out-of-scope -Wtype-equality-requires-operators Updates the haddock submodule.
Diffstat (limited to 'compiler/GHC/Tc')
-rw-r--r--compiler/GHC/Tc/Errors/Ppr.hs29
-rw-r--r--compiler/GHC/Tc/Errors/Types.hs29
-rw-r--r--compiler/GHC/Tc/Validity.hs4
3 files changed, 61 insertions, 1 deletions
diff --git a/compiler/GHC/Tc/Errors/Ppr.hs b/compiler/GHC/Tc/Errors/Ppr.hs
index ad78cfaf76..2c9b013e17 100644
--- a/compiler/GHC/Tc/Errors/Ppr.hs
+++ b/compiler/GHC/Tc/Errors/Ppr.hs
@@ -651,6 +651,23 @@ instance Diagnostic TcRnMessage where
fsep [ text "The use of" <+> quotes (ppr rdr_name)
<+> text "as an identifier",
text "will become an error in a future GHC release." ]
+ TcRnTypeEqualityOutOfScope
+ -> mkDecorated
+ [ text "The" <+> quotes (text "~") <+> text "operator is out of scope." $$
+ text "Assuming it to stand for an equality constraint."
+ , text "NB:" <+> (quotes (text "~") <+> text "used to be built-in syntax but now is a regular type operator" $$
+ text "exported from Data.Type.Equality and Prelude.") $$
+ text "If you are using a custom Prelude, consider re-exporting it."
+ , text "This will become an error in a future GHC release." ]
+ TcRnTypeEqualityRequiresOperators
+ -> mkSimpleDecorated $
+ fsep [ text "The use of" <+> quotes (text "~")
+ <+> text "without TypeOperators",
+ text "will become an error in a future GHC release." ]
+ TcRnIllegalTypeOperator overall_ty op
+ -> mkSimpleDecorated $
+ text "Illegal operator" <+> quotes (ppr op) <+>
+ text "in type" <+> quotes (ppr overall_ty)
TcRnGADTMonoLocalBinds
-> mkSimpleDecorated $
fsep [ text "Pattern matching on GADTs without MonoLocalBinds"
@@ -920,6 +937,12 @@ instance Diagnostic TcRnMessage where
-> ErrorWithoutFlag
TcRnForallIdentifier {}
-> WarningWithFlag Opt_WarnForallIdentifier
+ TcRnTypeEqualityOutOfScope
+ -> WarningWithFlag Opt_WarnTypeEqualityOutOfScope
+ TcRnTypeEqualityRequiresOperators
+ -> WarningWithFlag Opt_WarnTypeEqualityRequiresOperators
+ TcRnIllegalTypeOperator {}
+ -> ErrorWithoutFlag
TcRnGADTMonoLocalBinds {}
-> WarningWithFlag Opt_WarnGADTMonoLocalBinds
TcRnIncorrectNameSpace {}
@@ -1152,6 +1175,12 @@ instance Diagnostic TcRnMessage where
-> noHints
TcRnForallIdentifier {}
-> [SuggestRenameForall]
+ TcRnTypeEqualityOutOfScope
+ -> noHints
+ TcRnTypeEqualityRequiresOperators
+ -> [suggestExtension LangExt.TypeOperators]
+ TcRnIllegalTypeOperator {}
+ -> [suggestExtension LangExt.TypeOperators]
TcRnGADTMonoLocalBinds {}
-> [suggestAnyExtension [LangExt.GADTs, LangExt.TypeFamilies]]
TcRnIncorrectNameSpace nm is_th_use
diff --git a/compiler/GHC/Tc/Errors/Types.hs b/compiler/GHC/Tc/Errors/Types.hs
index abf574df19..58e984011a 100644
--- a/compiler/GHC/Tc/Errors/Types.hs
+++ b/compiler/GHC/Tc/Errors/Types.hs
@@ -1581,6 +1581,35 @@ data TcRnMessage where
-}
TcRnForallIdentifier :: RdrName -> TcRnMessage
+ {-| TcRnTypeEqualityOutOfScope is a warning (controlled by -Wtype-equality-out-of-scope)
+ that occurs when the type equality (a ~ b) is not in scope.
+
+ Test case: T18862b
+ -}
+ TcRnTypeEqualityOutOfScope :: TcRnMessage
+
+ {-| TcRnTypeEqualityRequiresOperators is a warning (controlled by -Wtype-equality-requires-operators)
+ that occurs when the type equality (a ~ b) is used without the TypeOperators extension.
+
+ Example:
+ {-# LANGUAGE NoTypeOperators #-}
+ f :: (a ~ b) => a -> b
+
+ Test case: T18862a
+ -}
+ TcRnTypeEqualityRequiresOperators :: TcRnMessage
+
+ {-| TcRnIllegalTypeOperator is an error that occurs when a type operator
+ is used without the TypeOperators extension.
+
+ Example:
+ {-# LANGUAGE NoTypeOperators #-}
+ f :: Vec a n -> Vec a m -> Vec a (n + m)
+
+ Test case: T12811
+ -}
+ TcRnIllegalTypeOperator :: !SDoc -> !RdrName -> TcRnMessage
+
{-| TcRnGADTMonoLocalBinds is a warning controlled by -Wgadt-mono-local-binds
that occurs when pattern matching on a GADT when -XMonoLocalBinds is off.
diff --git a/compiler/GHC/Tc/Validity.hs b/compiler/GHC/Tc/Validity.hs
index 1a5f2f6a41..598b07b8c7 100644
--- a/compiler/GHC/Tc/Validity.hs
+++ b/compiler/GHC/Tc/Validity.hs
@@ -1137,7 +1137,9 @@ check_class_pred env dflags ctxt pred cls tys
-- but here we want to treat them as equalities
= -- Equational constraints are valid in all contexts, and
-- we do not need to check e.g. for FlexibleContexts here, so just do nothing
- return ()
+ -- We used to require TypeFamilies/GADTs for equality constraints,
+ -- but not anymore (GHC Proposal #371)
+ return ()
| isIPClass cls
= do { check_arity