diff options
author | Simon Peyton Jones <simonpj@microsoft.com> | 2019-01-16 17:28:27 +0000 |
---|---|---|
committer | Simon Peyton Jones <simonpj@microsoft.com> | 2019-01-16 17:28:27 +0000 |
commit | 07e58c7d5b2186954987578abc0889cfe0fd9625 (patch) | |
tree | 0e251bd8f568e4bd9c2eab714635449b46979bca | |
parent | 4d76b1084f6c386cc945341ebf3377339f41572d (diff) | |
download | haskell-07e58c7d5b2186954987578abc0889cfe0fd9625.tar.gz |
Progress on #16185
-rw-r--r-- | compiler/basicTypes/Var.hs-boot | 7 | ||||
-rw-r--r-- | compiler/iface/IfaceType.hs | 16 | ||||
-rw-r--r-- | compiler/prelude/TysWiredIn.hs | 10 | ||||
-rw-r--r-- | compiler/prelude/TysWiredIn.hs-boot | 5 | ||||
-rw-r--r-- | compiler/typecheck/TcFlatten.hs | 4 | ||||
-rw-r--r-- | compiler/typecheck/TcHsType.hs | 4 | ||||
-rw-r--r-- | compiler/typecheck/TcMatches.hs | 4 | ||||
-rw-r--r-- | compiler/typecheck/TcSigs.hs | 1 | ||||
-rw-r--r-- | compiler/typecheck/TcUnify.hs | 4 | ||||
-rw-r--r-- | compiler/types/OptCoercion.hs | 10 | ||||
-rw-r--r-- | compiler/types/TyCoRep.hs | 21 | ||||
-rw-r--r-- | compiler/types/TyCoRep.hs-boot | 6 | ||||
-rw-r--r-- | compiler/types/TyCon.hs | 45 | ||||
-rw-r--r-- | compiler/types/Type.hs | 4 | ||||
-rw-r--r-- | testsuite/tests/typecheck/should_fail/tcfail057.stderr | 2 |
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) |