summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Peyton Jones <simonpj@microsoft.com>2019-01-16 17:28:27 +0000
committerSimon Peyton Jones <simonpj@microsoft.com>2019-01-16 17:28:27 +0000
commit07e58c7d5b2186954987578abc0889cfe0fd9625 (patch)
tree0e251bd8f568e4bd9c2eab714635449b46979bca
parent4d76b1084f6c386cc945341ebf3377339f41572d (diff)
downloadhaskell-07e58c7d5b2186954987578abc0889cfe0fd9625.tar.gz
Progress on #16185
-rw-r--r--compiler/basicTypes/Var.hs-boot7
-rw-r--r--compiler/iface/IfaceType.hs16
-rw-r--r--compiler/prelude/TysWiredIn.hs10
-rw-r--r--compiler/prelude/TysWiredIn.hs-boot5
-rw-r--r--compiler/typecheck/TcFlatten.hs4
-rw-r--r--compiler/typecheck/TcHsType.hs4
-rw-r--r--compiler/typecheck/TcMatches.hs4
-rw-r--r--compiler/typecheck/TcSigs.hs1
-rw-r--r--compiler/typecheck/TcUnify.hs4
-rw-r--r--compiler/types/OptCoercion.hs10
-rw-r--r--compiler/types/TyCoRep.hs21
-rw-r--r--compiler/types/TyCoRep.hs-boot6
-rw-r--r--compiler/types/TyCon.hs45
-rw-r--r--compiler/types/Type.hs4
-rw-r--r--testsuite/tests/typecheck/should_fail/tcfail057.stderr2
15 files changed, 79 insertions, 64 deletions
diff --git a/compiler/basicTypes/Var.hs-boot b/compiler/basicTypes/Var.hs-boot
new file mode 100644
index 0000000000..0f013beef7
--- /dev/null
+++ b/compiler/basicTypes/Var.hs-boot
@@ -0,0 +1,7 @@
+module Var where
+
+-- Var.hs-boot is Imported (only) by TyCoRep.hs-boot
+
+data ArgFlag
+data AnonArgFlag
+data Var
diff --git a/compiler/iface/IfaceType.hs b/compiler/iface/IfaceType.hs
index f8994d6b9b..a862197866 100644
--- a/compiler/iface/IfaceType.hs
+++ b/compiler/iface/IfaceType.hs
@@ -717,7 +717,9 @@ pprIfaceTyConBinders = sep . map go
go (Bndr (IfaceTvBndr bndr) vis) =
-- See Note [Pretty-printing invisible arguments]
case vis of
- AnonTCB -> ppr_bndr True
+ AnonTCB VisArg -> ppr_bndr True
+ AnonTCB InvisArg -> ppr_bndr True -- Rare; just promoted GADT data constructors
+ -- Should we print them differently?
NamedTCB Required -> ppr_bndr True
NamedTCB Specified -> char '@' <> ppr_bndr True
NamedTCB Inferred -> char '@' <> braces (ppr_bndr False)
@@ -765,7 +767,14 @@ pprPrecIfaceType :: PprPrec -> IfaceType -> SDoc
-- called from other places, besides `:type` and `:info`.
pprPrecIfaceType prec ty = eliminateRuntimeRep (ppr_ty prec) ty
+ppr_sigma :: PprPrec -> IfaceType -> SDoc
+ppr_sigma ctxt_prec ty
+ = maybeParen ctxt_prec funPrec (pprIfaceSigmaType ShowForAllMust ty)
+
ppr_ty :: PprPrec -> IfaceType -> SDoc
+ppr_ty ctxt_prec ty@(IfaceForAllTy {}) = ppr_sigma ctxt_prec ty
+ppr_ty ctxt_prec ty@(IfaceFunTy InvisArg _ _) = ppr_sigma ctxt_prec ty
+
ppr_ty _ (IfaceFreeTyVar tyvar) = ppr tyvar -- This is the main reason for IfaceFreeTyVar!
ppr_ty _ (IfaceTyVar tyvar) = ppr tyvar -- See Note [TcTyVars in IfaceType]
ppr_ty ctxt_prec (IfaceTyConApp tc tys) = pprTyTcApp ctxt_prec tc tys
@@ -777,7 +786,7 @@ ppr_ty ctxt_prec (IfaceFunTy _ ty1 ty2) -- Should be VisArg
maybeParen ctxt_prec funPrec $
sep [ppr_ty funPrec ty1, sep (ppr_fun_tail ty2)]
where
- ppr_fun_tail (IfaceFunTy _ ty1 ty2)
+ ppr_fun_tail (IfaceFunTy VisArg ty1 ty2)
= (arrow <+> ppr_ty funPrec ty1) : ppr_fun_tail ty2
ppr_fun_tail other_ty
= [arrow <+> pprIfaceType other_ty]
@@ -816,9 +825,6 @@ ppr_ty ctxt_prec (IfaceCoercionTy co)
(ppr_co ctxt_prec co)
(text "<>")
-ppr_ty ctxt_prec ty -- IfaceForAllTy
- = maybeParen ctxt_prec funPrec (pprIfaceSigmaType ShowForAllMust ty)
-
{- Note [Defaulting RuntimeRep variables]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RuntimeRep variables are considered by many (most?) users to be little
diff --git a/compiler/prelude/TysWiredIn.hs b/compiler/prelude/TysWiredIn.hs
index ff958131b8..59283983ee 100644
--- a/compiler/prelude/TysWiredIn.hs
+++ b/compiler/prelude/TysWiredIn.hs
@@ -16,8 +16,6 @@ module TysWiredIn (
mkWiredInIdName, -- used in MkId
- mkFunKind, mkForAllKind,
-
-- * All wired in things
wiredInTyCons, isBuiltInOcc_maybe,
@@ -595,14 +593,6 @@ liftedTypeKind, constraintKind :: Kind
liftedTypeKind = tYPE liftedRepTy
constraintKind = mkTyConApp constraintKindTyCon []
--- mkFunKind and mkForAllKind are defined here
--- solely so that TyCon can use them via a SOURCE import
-mkFunKind :: Kind -> Kind -> Kind
-mkFunKind = mkVisFunTy
-
-mkForAllKind :: TyCoVar -> ArgFlag -> Kind -> Kind
-mkForAllKind = mkForAllTy
-
{-
************************************************************************
* *
diff --git a/compiler/prelude/TysWiredIn.hs-boot b/compiler/prelude/TysWiredIn.hs-boot
index 1481a758b1..4e8ebba223 100644
--- a/compiler/prelude/TysWiredIn.hs-boot
+++ b/compiler/prelude/TysWiredIn.hs-boot
@@ -1,13 +1,8 @@
module TysWiredIn where
-import Var( TyVar, ArgFlag )
import {-# SOURCE #-} TyCon ( TyCon )
import {-# SOURCE #-} TyCoRep (Type, Kind)
-
-mkFunKind :: Kind -> Kind -> Kind
-mkForAllKind :: TyVar -> ArgFlag -> Kind -> Kind
-
listTyCon :: TyCon
typeNatKind, typeSymbolKind :: Type
mkBoxedTupleTy :: [Type] -> Type
diff --git a/compiler/typecheck/TcFlatten.hs b/compiler/typecheck/TcFlatten.hs
index d4850aea16..8b5d8a4c06 100644
--- a/compiler/typecheck/TcFlatten.hs
+++ b/compiler/typecheck/TcFlatten.hs
@@ -2183,7 +2183,7 @@ ty_con_binders_ty_binders' = foldr go ([], False)
where
go (Bndr tv (NamedTCB vis)) (bndrs, _)
= (Named (Bndr tv vis) : bndrs, True)
- go (Bndr tv AnonTCB) (bndrs, n)
- = (Anon VisArg (tyVarKind tv) : bndrs, n)
+ go (Bndr tv (AnonTCB af)) (bndrs, n)
+ = (Anon af (tyVarKind tv) : bndrs, n)
{-# INLINE go #-}
{-# INLINE ty_con_binders_ty_binders' #-}
diff --git a/compiler/typecheck/TcHsType.hs b/compiler/typecheck/TcHsType.hs
index fea0eabe64..a0ebe712ae 100644
--- a/compiler/typecheck/TcHsType.hs
+++ b/compiler/typecheck/TcHsType.hs
@@ -2206,7 +2206,7 @@ etaExpandAlgTyCon tc_bndrs kind
arg' = substTy subst arg
tv = mkTyVar (mkInternalName uniq occ loc) arg'
subst' = extendTCvInScope subst tv
- tcb = Bndr tv AnonTCB
+ tcb = Bndr tv (AnonTCB VisArg)
(uniq:uniqs') = uniqs
(occ:occs') = occs
@@ -2235,7 +2235,7 @@ tcbVisibilities tc orig_args
go fun_kind subst all_args@(arg : args)
| Just (tcb, inner_kind) <- splitPiTy_maybe fun_kind
= case tcb of
- Anon {} -> AnonTCB : go inner_kind subst args
+ Anon af _ -> AnonTCB af : go inner_kind subst args
Named (Bndr tv vis) -> NamedTCB vis : go inner_kind subst' args
where
subst' = extendTCvSubst subst tv arg
diff --git a/compiler/typecheck/TcMatches.hs b/compiler/typecheck/TcMatches.hs
index 5a3a270c88..4286a5463a 100644
--- a/compiler/typecheck/TcMatches.hs
+++ b/compiler/typecheck/TcMatches.hs
@@ -619,7 +619,7 @@ tcMcStmt ctxt (TransStmt { trS_stmts = stmts, trS_bndrs = bindersMap
, trS_by = by, trS_using = using, trS_form = form
, trS_ret = return_op, trS_bind = bind_op
, trS_fmap = fmap_op }) res_ty thing_inside
- = do { let star_star_kind = liftedTypeKind `mkFunKind` liftedTypeKind
+ = do { let star_star_kind = liftedTypeKind `mkVisFunTy` liftedTypeKind
; m1_ty <- newFlexiTyVarTy star_star_kind
; m2_ty <- newFlexiTyVarTy star_star_kind
; tup_ty <- newFlexiTyVarTy liftedTypeKind
@@ -744,7 +744,7 @@ tcMcStmt ctxt (TransStmt { trS_stmts = stmts, trS_bndrs = bindersMap
-- -> m (st1, (st2, st3))
--
tcMcStmt ctxt (ParStmt _ bndr_stmts_s mzip_op bind_op) res_ty thing_inside
- = do { let star_star_kind = liftedTypeKind `mkFunKind` liftedTypeKind
+ = do { let star_star_kind = liftedTypeKind `mkVisFunTy` liftedTypeKind
; m_ty <- newFlexiTyVarTy star_star_kind
; let mzip_ty = mkInvForAllTys [alphaTyVar, betaTyVar] $
diff --git a/compiler/typecheck/TcSigs.hs b/compiler/typecheck/TcSigs.hs
index ec50bf2791..359d48202d 100644
--- a/compiler/typecheck/TcSigs.hs
+++ b/compiler/typecheck/TcSigs.hs
@@ -217,6 +217,7 @@ tcUserTypeSig :: SrcSpan -> LHsSigWcType GhcRn -> Maybe Name
tcUserTypeSig loc hs_sig_ty mb_name
| isCompleteHsSig hs_sig_ty
= do { sigma_ty <- tcHsSigWcType ctxt_F hs_sig_ty
+ ; traceTc "tcuser" (ppr sigma_ty)
; return $
CompleteSig { sig_bndr = mkLocalId name sigma_ty
, sig_ctxt = ctxt_T
diff --git a/compiler/typecheck/TcUnify.hs b/compiler/typecheck/TcUnify.hs
index 1416e6b41e..aaf459bde9 100644
--- a/compiler/typecheck/TcUnify.hs
+++ b/compiler/typecheck/TcUnify.hs
@@ -444,7 +444,7 @@ matchExpectedAppTy orig_ty
; return (co, (ty1, ty2)) }
orig_kind = tcTypeKind orig_ty
- kind1 = mkFunKind liftedTypeKind orig_kind
+ kind1 = mkVisFunTy liftedTypeKind orig_kind
kind2 = liftedTypeKind -- m :: * -> k
-- arg type :: *
@@ -2043,7 +2043,7 @@ matchExpectedFunKind hs_ty = go
defer k
= do { arg_kind <- newMetaKindVar
; res_kind <- newMetaKindVar
- ; let new_fun = mkFunKind arg_kind res_kind
+ ; let new_fun = mkVisFunTy arg_kind res_kind
origin = TypeEqOrigin { uo_actual = k
, uo_expected = new_fun
, uo_thing = Just (ppr hs_ty)
diff --git a/compiler/types/OptCoercion.hs b/compiler/types/OptCoercion.hs
index 1d48ed05b5..385a4b3740 100644
--- a/compiler/types/OptCoercion.hs
+++ b/compiler/types/OptCoercion.hs
@@ -2,9 +2,13 @@
{-# LANGUAGE CPP #-}
--- The default iteration limit is a bit too low for the definitions
--- in this module.
-{-# OPTIONS_GHC -fmax-pmcheck-iterations=10000000 #-}
+{-# OPTIONS_GHC -Wno-overlapping-patterns -Wno-incomplete-patterns #-}
+ -- Yuk! Suppresses bogus warnings
+ -- The -Wno-incomplete-patterns suppresses
+ -- a pattern-checker iteration limit error
+ -- I have not idea why the iteration limit had suddenly blown up
+ -- This happened when I added FFunTy, and a COMPLETE pragma for
+ -- Type; but there is no pattern matching on Type here!
module OptCoercion ( optCoercion, checkAxInstCo ) where
diff --git a/compiler/types/TyCoRep.hs b/compiler/types/TyCoRep.hs
index 2fbf6b1933..d8eac95812 100644
--- a/compiler/types/TyCoRep.hs
+++ b/compiler/types/TyCoRep.hs
@@ -17,7 +17,7 @@ Note [The Type-related module hierarchy]
-- We expose the relevant stuff from this module via the Type module
{-# OPTIONS_HADDOCK not-home #-}
-{-# LANGUAGE CPP, DeriveDataTypeable, MultiWayIf, PatternSynonyms #-}
+{-# LANGUAGE CPP, DeriveDataTypeable, MultiWayIf, PatternSynonyms, BangPatterns #-}
module TyCoRep (
TyThing(..), tyThingCategory, pprTyThingCategory, pprShortTyThing,
@@ -45,7 +45,7 @@ module TyCoRep (
-- * Functions over types
mkTyConTy, mkTyVarTy, mkTyVarTys,
mkTyCoVarTy, mkTyCoVarTys,
- mkVisFunTy, mkInvisFunTy, mkVisFunTys, mkInvisFunTys,
+ mkFFunTy, mkVisFunTy, mkInvisFunTy, mkVisFunTys, mkInvisFunTys,
mkTyCoForAllTy, mkForAllTys,
mkForAllTy,
mkTyCoPiTy, mkTyCoPiTys,
@@ -337,7 +337,8 @@ data Type
deriving Data.Data
-{-# COMPLETE FunTy, TyVarTy, AppTy, TyConApp, ForAllTy, LitTy, CastTy, CoercionTy #-}
+{-# COMPLETE FunTy, TyVarTy, AppTy, TyConApp
+ , ForAllTy, LitTy, CastTy, CoercionTy :: Type #-}
-- | 'FunTy' is a (uni-directional) pattern synonym for the common
-- case where we want to match on the argument/result type, but
@@ -829,10 +830,14 @@ mkTyCoVarTy v
mkTyCoVarTys :: [TyCoVar] -> [Type]
mkTyCoVarTys = map mkTyCoVarTy
-infixr 3 `mkVisFunTy`, `mkInvisFunTy` -- Associates to the right
+infixr 3 `mkFFunTy`, `mkVisFunTy`, `mkInvisFunTy` -- Associates to the right
+
+mkFFunTy :: AnonArgFlag -> Type -> Type -> Type
+mkFFunTy af arg res = FFunTy { ft_af = af, ft_arg = arg, ft_res = res }
+
mkVisFunTy, mkInvisFunTy :: Type -> Type -> Type
-mkVisFunTy arg res = FFunTy { ft_af = VisArg, ft_arg = arg, ft_res = res }
-mkInvisFunTy arg res = FFunTy { ft_af = InvisArg, ft_arg = arg, ft_res = res }
+mkVisFunTy = mkFFunTy VisArg
+mkInvisFunTy = mkFFunTy InvisArg
-- | Make nested arrow types
mkVisFunTys, mkInvisFunTys :: [Type] -> Type -> Type
@@ -2124,10 +2129,10 @@ almost_devoid_co_var_of_types (ty:tys) cv
injectiveVarsOfBinder :: TyConBinder -> FV
injectiveVarsOfBinder (Bndr tv vis) =
case vis of
- AnonTCB -> injectiveVarsOfType (varType tv)
+ AnonTCB VisArg -> injectiveVarsOfType (varType tv)
NamedTCB Required -> unitFV tv `unionFV`
injectiveVarsOfType (varType tv)
- NamedTCB _ -> emptyFV
+ _ -> emptyFV
-- | Returns the free variables of a 'Type' that are in injective positions.
-- (See @Note [Kind annotations on TyConApps]@ in "TcSplice" for an explanation
diff --git a/compiler/types/TyCoRep.hs-boot b/compiler/types/TyCoRep.hs-boot
index 5af8c1d57f..85ef782553 100644
--- a/compiler/types/TyCoRep.hs-boot
+++ b/compiler/types/TyCoRep.hs-boot
@@ -4,6 +4,7 @@ import GhcPrelude
import Outputable ( SDoc )
import Data.Data ( Data )
+import {-# SOURCE #-} Var( Var, ArgFlag, AnonArgFlag )
data Type
data TyThing
@@ -22,8 +23,9 @@ type MCoercionN = MCoercion
pprKind :: Kind -> SDoc
pprType :: Type -> SDoc
+mkFFunTy :: AnonArgFlag -> Type -> Type -> Type
+mkForAllTy :: Var -> ArgFlag -> Type -> Type
isRuntimeRepTy :: Type -> Bool
-instance Data Type
- -- To support Data instances in CoAxiom
+instance Data Type -- To support Data instances in CoAxiom
diff --git a/compiler/types/TyCon.hs b/compiler/types/TyCon.hs
index eb0b84d47e..e19f980aca 100644
--- a/compiler/types/TyCon.hs
+++ b/compiler/types/TyCon.hs
@@ -132,10 +132,9 @@ module TyCon(
import GhcPrelude
-import {-# SOURCE #-} TyCoRep ( Kind, Type, PredType, pprType )
+import {-# SOURCE #-} TyCoRep ( Kind, Type, PredType, pprType, mkForAllTy, mkFFunTy )
import {-# SOURCE #-} TysWiredIn ( runtimeRepTyCon, constraintKind
- , vecCountTyCon, vecElemTyCon, liftedTypeKind
- , mkFunKind, mkForAllKind )
+ , vecCountTyCon, vecElemTyCon, liftedTypeKind )
import {-# SOURCE #-} DataCon ( DataCon, dataConExTyCoVars, dataConFieldLabels
, dataConTyCon, dataConFullSig
, isUnboxedSumCon )
@@ -402,15 +401,15 @@ type TyConTyCoBinder = VarBndr TyCoVar TyConBndrVis
data TyConBndrVis
= NamedTCB ArgFlag
- | AnonTCB
+ | AnonTCB AnonArgFlag
instance Outputable TyConBndrVis where
- ppr (NamedTCB flag) = text "NamedTCB" <+> ppr flag
- ppr AnonTCB = text "AnonTCB"
+ ppr (NamedTCB flag) = text "NamedTCB" <> ppr flag
+ ppr (AnonTCB af) = text "AnonTCB" <> ppr af
mkAnonTyConBinder :: TyVar -> TyConBinder
mkAnonTyConBinder tv = ASSERT( isTyVar tv)
- Bndr tv AnonTCB
+ Bndr tv (AnonTCB VisArg)
mkAnonTyConBinders :: [TyVar] -> [TyConBinder]
mkAnonTyConBinders tvs = map mkAnonTyConBinder tvs
@@ -437,8 +436,9 @@ tyConBinderArgFlag :: TyConBinder -> ArgFlag
tyConBinderArgFlag (Bndr _ vis) = tyConBndrVisArgFlag vis
tyConBndrVisArgFlag :: TyConBndrVis -> ArgFlag
-tyConBndrVisArgFlag (NamedTCB vis) = vis
-tyConBndrVisArgFlag AnonTCB = Required
+tyConBndrVisArgFlag (NamedTCB vis) = vis
+tyConBndrVisArgFlag (AnonTCB VisArg) = Required
+tyConBndrVisArgFlag (AnonTCB InvisArg) = Inferred
isNamedTyConBinder :: TyConBinder -> Bool
-- Identifies kind variables
@@ -452,8 +452,9 @@ isVisibleTyConBinder :: VarBndr tv TyConBndrVis -> Bool
isVisibleTyConBinder (Bndr _ tcb_vis) = isVisibleTcbVis tcb_vis
isVisibleTcbVis :: TyConBndrVis -> Bool
-isVisibleTcbVis (NamedTCB vis) = isVisibleArgFlag vis
-isVisibleTcbVis AnonTCB = True
+isVisibleTcbVis (NamedTCB vis) = isVisibleArgFlag vis
+isVisibleTcbVis (AnonTCB VisArg) = True
+isVisibleTcbVis (AnonTCB InvisArg) = False
isInvisibleTyConBinder :: VarBndr tv TyConBndrVis -> Bool
-- Works for IfaceTyConBinder too
@@ -463,8 +464,8 @@ mkTyConKind :: [TyConBinder] -> Kind -> Kind
mkTyConKind bndrs res_kind = foldr mk res_kind bndrs
where
mk :: TyConBinder -> Kind -> Kind
- mk (Bndr tv AnonTCB) k = mkFunKind (varType tv) k
- mk (Bndr tv (NamedTCB vis)) k = mkForAllKind tv vis k
+ mk (Bndr tv (AnonTCB af)) k = mkFFunTy af (varType tv) k
+ mk (Bndr tv (NamedTCB vis)) k = mkForAllTy tv vis k
tyConTyVarBinders :: [TyConBinder] -- From the TyCon
-> [TyVarBinder] -- Suitable for the foralls of a term function
@@ -475,7 +476,8 @@ tyConTyVarBinders tc_bndrs
mk_binder (Bndr tv tc_vis) = mkTyVarBinder vis tv
where
vis = case tc_vis of
- AnonTCB -> Specified
+ AnonTCB VisArg -> Specified
+ AnonTCB InvisArg -> Inferred
NamedTCB Required -> Specified
NamedTCB vis -> vis
@@ -596,18 +598,21 @@ They fit together like so:
-}
instance Outputable tv => Outputable (VarBndr tv TyConBndrVis) where
- ppr (Bndr v AnonTCB) = text "anon" <+> parens (ppr v)
- ppr (Bndr v (NamedTCB Required)) = text "req" <+> parens (ppr v)
- ppr (Bndr v (NamedTCB Specified)) = text "spec" <+> parens (ppr v)
- ppr (Bndr v (NamedTCB Inferred)) = text "inf" <+> parens (ppr v)
+ ppr (Bndr v bi) = ppr_bi bi <+> parens (ppr v)
+ where
+ ppr_bi (AnonTCB VisArg) = text "anon-vis"
+ ppr_bi (AnonTCB InvisArg) = text "anon-invis"
+ ppr_bi (NamedTCB Required) = text "req"
+ ppr_bi (NamedTCB Specified) = text "spec"
+ ppr_bi (NamedTCB Inferred) = text "inf"
instance Binary TyConBndrVis where
- put_ bh AnonTCB = putByte bh 0
+ put_ bh (AnonTCB af) = do { putByte bh 0; put_ bh af }
put_ bh (NamedTCB vis) = do { putByte bh 1; put_ bh vis }
get bh = do { h <- getByte bh
; case h of
- 0 -> return AnonTCB
+ 0 -> do { af <- get bh; return (AnonTCB af) }
_ -> do { vis <- get bh; return (NamedTCB vis) } }
diff --git a/compiler/types/Type.hs b/compiler/types/Type.hs
index d8d0c516dd..2042451ae5 100644
--- a/compiler/types/Type.hs
+++ b/compiler/types/Type.hs
@@ -1287,7 +1287,7 @@ tyConBindersTyCoBinders :: [TyConBinder] -> [TyCoBinder]
tyConBindersTyCoBinders = map to_tyb
where
to_tyb (Bndr tv (NamedTCB vis)) = Named (Bndr tv vis)
- to_tyb (Bndr tv AnonTCB) = Anon VisArg (varType tv)
+ to_tyb (Bndr tv (AnonTCB af)) = Anon af (varType tv)
{-
--------------------------------------------------------------------
@@ -1411,7 +1411,7 @@ mkTyConBindersPreferAnon vars inner_tkvs = ASSERT( all isTyVar vars)
= ( Bndr v (NamedTCB Required) : binders
, fvs `delVarSet` v `unionVarSet` kind_vars )
| otherwise
- = ( Bndr v AnonTCB : binders
+ = ( Bndr v (AnonTCB VisArg) : binders
, fvs `unionVarSet` kind_vars )
where
(binders, fvs) = go vs
diff --git a/testsuite/tests/typecheck/should_fail/tcfail057.stderr b/testsuite/tests/typecheck/should_fail/tcfail057.stderr
index 9ddffeb28b..cb6bb97f92 100644
--- a/testsuite/tests/typecheck/should_fail/tcfail057.stderr
+++ b/testsuite/tests/typecheck/should_fail/tcfail057.stderr
@@ -10,4 +10,4 @@ tcfail057.hs:6:7: error:
In an equation for ‘f’: f x = x
• Relevant bindings include
x :: RealFrac a (bound at tcfail057.hs:6:3)
- f :: RealFrac a => a -> a (bound at tcfail057.hs:6:1)
+ f :: RealFrac a -> a -> a (bound at tcfail057.hs:6:1)