summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compiler/basicTypes/DataCon.hs-boot2
-rw-r--r--compiler/coreSyn/CoreLint.hs12
-rw-r--r--compiler/deSugar/DsUtils.hs2
-rw-r--r--compiler/hsSyn/HsDecls.hs2
-rw-r--r--compiler/hsSyn/HsExpr.hs10
-rw-r--r--compiler/iface/IfaceSyn.hs4
-rw-r--r--compiler/iface/LoadIface.hs7
-rw-r--r--compiler/nativeGen/Reg.hs5
-rw-r--r--compiler/nativeGen/SPARC/Ppr.hs2
-rw-r--r--compiler/typecheck/FamInst.hs12
-rw-r--r--compiler/typecheck/TcInstDcls.hs3
-rw-r--r--compiler/typecheck/TcValidity.hs16
-rw-r--r--compiler/types/Class.hs2
-rw-r--r--compiler/types/Coercion.hs42
-rw-r--r--compiler/types/TypeRep.hs18
-rw-r--r--compiler/utils/BooleanFormula.hs2
-rw-r--r--compiler/utils/Outputable.hs13
-rw-r--r--compiler/utils/Pretty.hs8
-rw-r--r--testsuite/tests/ghci/scripts/T6018ghcifail.stderr56
-rw-r--r--testsuite/tests/indexed-types/should_compile/T3017.stderr3
-rw-r--r--testsuite/tests/indexed-types/should_compile/T9085.stderr2
-rw-r--r--testsuite/tests/indexed-types/should_fail/NoGood.stderr4
-rw-r--r--testsuite/tests/indexed-types/should_fail/Over.stderr8
-rw-r--r--testsuite/tests/indexed-types/should_fail/SimpleFail11a.stderr8
-rw-r--r--testsuite/tests/indexed-types/should_fail/SimpleFail11b.stderr8
-rw-r--r--testsuite/tests/indexed-types/should_fail/SimpleFail11c.stderr8
-rw-r--r--testsuite/tests/indexed-types/should_fail/SimpleFail11d.stderr4
-rw-r--r--testsuite/tests/indexed-types/should_fail/SimpleFail2b.stderr4
-rw-r--r--testsuite/tests/indexed-types/should_fail/T2334A.stderr4
-rw-r--r--testsuite/tests/indexed-types/should_fail/T2677.stderr4
-rw-r--r--testsuite/tests/indexed-types/should_fail/T3330b.stderr4
-rw-r--r--testsuite/tests/indexed-types/should_fail/T4246.stderr8
-rw-r--r--testsuite/tests/indexed-types/should_fail/T9371.stderr4
-rw-r--r--testsuite/tests/partial-sigs/should_compile/DataFamilyInstanceLHS.stderr3
-rw-r--r--testsuite/tests/partial-sigs/should_compile/TypeFamilyInstanceLHS.stderr6
-rw-r--r--testsuite/tests/polykinds/T7524.stderr5
-rw-r--r--testsuite/tests/roles/should_compile/Roles14.stderr2
-rw-r--r--testsuite/tests/roles/should_compile/Roles3.stderr11
-rw-r--r--testsuite/tests/roles/should_compile/Roles4.stderr5
-rw-r--r--testsuite/tests/roles/should_compile/T8958.stderr3
-rw-r--r--testsuite/tests/th/T6018th.stderr4
-rw-r--r--testsuite/tests/typecheck/should_compile/T6018.stderr4
-rw-r--r--testsuite/tests/typecheck/should_compile/tc231.stderr3
-rw-r--r--testsuite/tests/typecheck/should_compile/tc265.stderr2
-rw-r--r--testsuite/tests/typecheck/should_fail/T10836.stderr8
-rw-r--r--testsuite/tests/typecheck/should_fail/T6018fail.stderr77
-rw-r--r--testsuite/tests/typecheck/should_fail/T6018failclosed.stderr33
47 files changed, 261 insertions, 196 deletions
diff --git a/compiler/basicTypes/DataCon.hs-boot b/compiler/basicTypes/DataCon.hs-boot
index ca20788a84..615ef53d09 100644
--- a/compiler/basicTypes/DataCon.hs-boot
+++ b/compiler/basicTypes/DataCon.hs-boot
@@ -17,6 +17,8 @@ dataConSourceArity :: DataCon -> Arity
dataConFieldLabels :: DataCon -> [FieldLabel]
dataConInstOrigArgTys :: DataCon -> [Type] -> [Type]
dataConStupidTheta :: DataCon -> ThetaType
+dataConFullSig :: DataCon
+ -> ([TyVar], [TyVar], [(TyVar,Type)], ThetaType, [Type], Type)
instance Eq DataCon
instance Ord DataCon
diff --git a/compiler/coreSyn/CoreLint.hs b/compiler/coreSyn/CoreLint.hs
index 00a7fd0b19..d9116a6f9b 100644
--- a/compiler/coreSyn/CoreLint.hs
+++ b/compiler/coreSyn/CoreLint.hs
@@ -1350,13 +1350,13 @@ lintCoercion (InstCo co arg_ty)
lintCoercion co@(AxiomInstCo con ind cos)
= do { unless (0 <= ind && ind < numBranches (coAxiomBranches con))
- (bad_ax (ptext (sLit "index out of range")))
+ (bad_ax (text "index out of range"))
-- See Note [Kind instantiation in coercions]
; let CoAxBranch { cab_tvs = ktvs
, cab_roles = roles
, cab_lhs = lhs
, cab_rhs = rhs } = coAxiomNthBranch con ind
- ; unless (equalLength ktvs cos) (bad_ax (ptext (sLit "lengths")))
+ ; unless (equalLength ktvs cos) (bad_ax (text "lengths"))
; in_scope <- getInScope
; let empty_subst = mkTvSubst in_scope emptyTvSubstEnv
; (subst_l, subst_r) <- foldlM check_ki
@@ -1365,11 +1365,12 @@ lintCoercion co@(AxiomInstCo con ind cos)
; let lhs' = Type.substTys subst_l lhs
rhs' = Type.substTy subst_r rhs
; case checkAxInstCo co of
- Just bad_branch -> bad_ax $ ptext (sLit "inconsistent with") <+> (pprCoAxBranch (coAxiomTyCon con) bad_branch)
+ Just bad_branch -> bad_ax $ text "inconsistent with" <+>
+ pprCoAxBranch con bad_branch
Nothing -> return ()
; return (typeKind rhs', mkTyConApp (coAxiomTyCon con) lhs', rhs', coAxiomRole con) }
where
- bad_ax what = addErrL (hang (ptext (sLit "Bad axiom application") <+> parens what)
+ bad_ax what = addErrL (hang (text "Bad axiom application" <+> parens what)
2 (ppr co))
check_ki (subst_l, subst_r) (ktv, role, co)
@@ -1379,7 +1380,8 @@ lintCoercion co@(AxiomInstCo con ind cos)
-- Using subst_l is ok, because subst_l and subst_r
-- must agree on kind equalities
; unless (k `isSubKind` ktv_kind)
- (bad_ax (ptext (sLit "check_ki2") <+> vcat [ ppr co, ppr k, ppr ktv, ppr ktv_kind ] ))
+ (bad_ax (text "check_ki2" <+>
+ vcat [ ppr co, ppr k, ppr ktv, ppr ktv_kind ] ))
; return (Type.extendTvSubst subst_l ktv t1,
Type.extendTvSubst subst_r ktv t2) }
diff --git a/compiler/deSugar/DsUtils.hs b/compiler/deSugar/DsUtils.hs
index a14c608d1c..98f7f0f051 100644
--- a/compiler/deSugar/DsUtils.hs
+++ b/compiler/deSugar/DsUtils.hs
@@ -463,7 +463,7 @@ mkErrorAppDs err_id ty msg = do
src_loc <- getSrcSpanDs
dflags <- getDynFlags
let
- full_msg = showSDoc dflags (hcat [ppr src_loc, text "|", msg])
+ full_msg = showSDoc dflags (hcat [ppr src_loc, vbar, msg])
core_msg = Lit (mkMachString full_msg)
-- mkMachString returns a result of type String#
return (mkApps (Var err_id) [Type ty, core_msg])
diff --git a/compiler/hsSyn/HsDecls.hs b/compiler/hsSyn/HsDecls.hs
index ec46d0e0f2..91c04fa08c 100644
--- a/compiler/hsSyn/HsDecls.hs
+++ b/compiler/hsSyn/HsDecls.hs
@@ -906,7 +906,7 @@ pprFamilyDecl top_level (FamilyDecl { fdInfo = info, fdLName = ltycon
TyVarSig tv_bndr -> text "=" <+> ppr tv_bndr
pp_inj = case mb_inj of
Just (L _ (InjectivityAnn lhs rhs)) ->
- hsep [ text "|", ppr lhs, text "->", hsep (map ppr rhs) ]
+ hsep [ vbar, ppr lhs, text "->", hsep (map ppr rhs) ]
Nothing -> empty
(pp_where, pp_eqns) = case info of
ClosedTypeFamily mb_eqns ->
diff --git a/compiler/hsSyn/HsExpr.hs b/compiler/hsSyn/HsExpr.hs
index d02f2d57d0..e688d18a08 100644
--- a/compiler/hsSyn/HsExpr.hs
+++ b/compiler/hsSyn/HsExpr.hs
@@ -713,7 +713,7 @@ ppr_expr (HsIf _ e1 e2 e3)
ppr_expr (HsMultiIf _ alts)
= sep $ ptext (sLit "if") : map ppr_alt alts
where ppr_alt (L _ (GRHS guards expr)) =
- sep [ char '|' <+> interpp'SP guards
+ sep [ vbar <+> interpp'SP guards
, ptext (sLit "->") <+> pprDeeper (ppr expr) ]
-- special case: let ... in let ...
@@ -1283,7 +1283,7 @@ pprGRHS ctxt (GRHS [] body)
= pp_rhs ctxt body
pprGRHS ctxt (GRHS guards body)
- = sep [char '|' <+> interpp'SP guards, pp_rhs ctxt body]
+ = sep [vbar <+> interpp'SP guards, pp_rhs ctxt body]
pp_rhs :: Outputable body => HsMatchContext idL -> body -> SDoc
pp_rhs ctxt rhs = matchSeparator ctxt <+> pprDeeper (ppr rhs)
@@ -1707,7 +1707,7 @@ pprComp :: (OutputableBndr id, Outputable body)
pprComp quals -- Prints: body | qual1, ..., qualn
| not (null quals)
, L _ (LastStmt body _ _) <- last quals
- = hang (ppr body <+> char '|') 2 (pprQuals (dropTail 1 quals))
+ = hang (ppr body <+> vbar) 2 (pprQuals (dropTail 1 quals))
| otherwise
= pprPanic "pprComp" (pprQuals quals)
@@ -1842,7 +1842,7 @@ pprSplice (HsQuasiQuote n q _ s) = ppr_quasi n q s
ppr_quasi :: OutputableBndr id => id -> id -> FastString -> SDoc
ppr_quasi n quoter quote = ifPprDebug (brackets (ppr n)) <>
- char '[' <> ppr quoter <> ptext (sLit "|") <>
+ char '[' <> ppr quoter <> vbar <>
ppr quote <> ptext (sLit "|]")
ppr_splice :: OutputableBndr id => SDoc -> id -> LHsExpr id -> SDoc
@@ -1888,7 +1888,7 @@ pprHsBracket (VarBr False n) = ptext (sLit "''") <> ppr n
pprHsBracket (TExpBr e) = thTyBrackets (ppr e)
thBrackets :: SDoc -> SDoc -> SDoc
-thBrackets pp_kind pp_body = char '[' <> pp_kind <> char '|' <+>
+thBrackets pp_kind pp_body = char '[' <> pp_kind <> vbar <+>
pp_body <+> ptext (sLit "|]")
thTyBrackets :: SDoc -> SDoc
diff --git a/compiler/iface/IfaceSyn.hs b/compiler/iface/IfaceSyn.hs
index 3911786594..41d6779785 100644
--- a/compiler/iface/IfaceSyn.hs
+++ b/compiler/iface/IfaceSyn.hs
@@ -643,7 +643,7 @@ pprIfaceDecl ss (IfaceData { ifName = tycon, ifCType = ctype,
-- See discussion on Trac #8672.
add_bars [] = Outputable.empty
- add_bars (c:cs) = sep ((equals <+> c) : map (char '|' <+>) cs)
+ add_bars (c:cs) = sep ((equals <+> c) : map (vbar <+>) cs)
ok_con dc = showSub ss dc || any (showSub ss) (ifConFields dc)
@@ -741,7 +741,7 @@ pprIfaceDecl ss (IfaceFamily { ifName = tycon, ifTyVars = tyvars
pp_inj_cond res inj = case filterByList inj tyvars of
[] -> empty
- tvs -> hsep [text "|", ppr res, text "->", interppSP (map fst tvs)]
+ tvs -> hsep [vbar, ppr res, text "->", interppSP (map fst tvs)]
pp_rhs IfaceDataFamilyTyCon
= ppShowIface ss (ptext (sLit "data"))
diff --git a/compiler/iface/LoadIface.hs b/compiler/iface/LoadIface.hs
index 48acd8dd28..f4a6a3d79d 100644
--- a/compiler/iface/LoadIface.hs
+++ b/compiler/iface/LoadIface.hs
@@ -910,9 +910,10 @@ When printing export lists, we print like this:
pprExport :: IfaceExport -> SDoc
pprExport (Avail _ n) = ppr n
pprExport (AvailTC _ [] []) = Outputable.empty
-pprExport (AvailTC n ns0 fs) = case ns0 of
- (n':ns) | n==n' -> ppr n <> pp_export ns fs
- _ -> ppr n <> char '|' <> pp_export ns0 fs
+pprExport (AvailTC n ns0 fs)
+ = case ns0 of
+ (n':ns) | n==n' -> ppr n <> pp_export ns fs
+ _ -> ppr n <> vbar <> pp_export ns0 fs
where
pp_export [] [] = Outputable.empty
pp_export names fs = braces (hsep (map ppr names ++ map (ppr . flLabel) fs))
diff --git a/compiler/nativeGen/Reg.hs b/compiler/nativeGen/Reg.hs
index 862306f0bb..e8d0187641 100644
--- a/compiler/nativeGen/Reg.hs
+++ b/compiler/nativeGen/Reg.hs
@@ -135,8 +135,9 @@ instance Uniquable RealReg where
instance Outputable RealReg where
ppr reg
= case reg of
- RealRegSingle i -> text "%r" <> int i
- RealRegPair r1 r2 -> text "%r(" <> int r1 <> text "|" <> int r2 <> text ")"
+ RealRegSingle i -> text "%r" <> int i
+ RealRegPair r1 r2 -> text "%r(" <> int r1
+ <> vbar <> int r2 <> text ")"
regNosOfRealReg :: RealReg -> [RegNo]
regNosOfRealReg rr
diff --git a/compiler/nativeGen/SPARC/Ppr.hs b/compiler/nativeGen/SPARC/Ppr.hs
index 93beabef10..eac88f8d0c 100644
--- a/compiler/nativeGen/SPARC/Ppr.hs
+++ b/compiler/nativeGen/SPARC/Ppr.hs
@@ -161,7 +161,7 @@ pprReg reg
RealRegPair r1 r2
-> text "(" <> pprReg_ofRegNo r1
- <> text "|" <> pprReg_ofRegNo r2
+ <> vbar <> pprReg_ofRegNo r2
<> text ")"
diff --git a/compiler/typecheck/FamInst.hs b/compiler/typecheck/FamInst.hs
index 7023a4c1f9..93de5040f0 100644
--- a/compiler/typecheck/FamInst.hs
+++ b/compiler/typecheck/FamInst.hs
@@ -402,10 +402,10 @@ checkForInjectivityConflicts instEnvs famInst
| isTypeFamilyTyCon tycon
-- type family is injective in at least one argument
, Injective inj <- familyTyConInjectivityInfo tycon = do
- { let axiom = coAxiomSingleBranch (fi_axiom famInst)
+ { let axiom = coAxiomSingleBranch fi_ax
conflicts = lookupFamInstEnvInjectivityConflicts inj instEnvs famInst
-- see Note [Verifying injectivity annotation] in FamInstEnv
- errs = makeInjectivityErrors tycon axiom inj conflicts
+ errs = makeInjectivityErrors fi_ax axiom inj conflicts
; mapM_ (\(err, span) -> setSrcSpan span $ addErr err) errs
; return (null errs)
}
@@ -414,15 +414,16 @@ checkForInjectivityConflicts instEnvs famInst
-- type family we report no conflicts
| otherwise = return True
where tycon = famInstTyCon famInst
+ fi_ax = fi_axiom famInst
-- | Build a list of injectivity errors together with their source locations.
makeInjectivityErrors
- :: TyCon -- ^ Type family tycon for which we generate errors
+ :: CoAxiom br -- ^ Type family for which we generate errors
-> CoAxBranch -- ^ Currently checked equation (represented by axiom)
-> [Bool] -- ^ Injectivity annotation
-> [CoAxBranch] -- ^ List of injectivity conflicts
-> [(SDoc, SrcSpan)]
-makeInjectivityErrors tycon axiom inj conflicts
+makeInjectivityErrors fi_ax axiom inj conflicts
= ASSERT2( any id inj, text "No injective type variables" )
let lhs = coAxBranchLHS axiom
rhs = coAxBranchRHS axiom
@@ -435,7 +436,8 @@ makeInjectivityErrors tycon axiom inj conflicts
wrong_bare_rhs = not $ null bare_variables
err_builder herald eqns
- = ( herald $$ vcat (map (pprCoAxBranch tycon) eqns)
+ = ( hang herald
+ 2 (vcat (map (pprCoAxBranch fi_ax) eqns))
, coAxBranchSpan (head eqns) )
errorIf p f = if p then [f err_builder axiom] else []
in errorIf are_conflicts (conflictInjInstErr conflicts )
diff --git a/compiler/typecheck/TcInstDcls.hs b/compiler/typecheck/TcInstDcls.hs
index 06cb42715a..51e00159b1 100644
--- a/compiler/typecheck/TcInstDcls.hs
+++ b/compiler/typecheck/TcInstDcls.hs
@@ -1288,7 +1288,8 @@ tcMethods dfun_id clas tyvars dfun_ev_vars inst_tys
error_msg dflags = L inst_loc (HsLit (HsStringPrim ""
(unsafeMkByteString (error_string dflags))))
meth_tau = funResultTy (applyTys (idType sel_id) inst_tys)
- error_string dflags = showSDoc dflags (hcat [ppr inst_loc, text "|", ppr sel_id ])
+ error_string dflags = showSDoc dflags
+ (hcat [ppr inst_loc, vbar, ppr sel_id ])
lam_wrapper = mkWpTyLams tyvars <.> mkWpLams dfun_ev_vars
tc_default sel_id (DefMeth dm_name) -- A polymorphic default method
diff --git a/compiler/typecheck/TcValidity.hs b/compiler/typecheck/TcValidity.hs
index 3b5d206a67..d3f8291881 100644
--- a/compiler/typecheck/TcValidity.hs
+++ b/compiler/typecheck/TcValidity.hs
@@ -35,6 +35,7 @@ import Class
import TyCon
-- others:
+import Coercion ( pprCoAxBranch )
import HsSyn -- HsType
import TcRnMonad -- TcType, amongst others
import FunDeps
@@ -1238,7 +1239,7 @@ wrongATArgErr ty instTy =
-}
checkValidCoAxiom :: CoAxiom Branched -> TcM ()
-checkValidCoAxiom (CoAxiom { co_ax_tc = fam_tc, co_ax_branches = branches })
+checkValidCoAxiom ax@(CoAxiom { co_ax_tc = fam_tc, co_ax_branches = branches })
= do { mapM_ (checkValidCoAxBranch Nothing fam_tc) branch_list
; foldlM_ check_branch_compat [] branch_list }
where
@@ -1254,7 +1255,7 @@ checkValidCoAxiom (CoAxiom { co_ax_tc = fam_tc, co_ax_branches = branches })
check_branch_compat prev_branches cur_branch
| cur_branch `isDominatedBy` prev_branches
= do { addWarnAt (coAxBranchSpan cur_branch) $
- inaccessibleCoAxBranch fam_tc cur_branch
+ inaccessibleCoAxBranch ax cur_branch
; return prev_branches }
| otherwise
= do { check_injectivity prev_branches cur_branch
@@ -1270,7 +1271,7 @@ checkValidCoAxiom (CoAxiom { co_ax_tc = fam_tc, co_ax_branches = branches })
fst $ foldl (gather_conflicts inj prev_branches cur_branch)
([], 0) prev_branches
; mapM_ (\(err, span) -> setSrcSpan span $ addErr err)
- (makeInjectivityErrors fam_tc cur_branch inj conflicts) }
+ (makeInjectivityErrors ax cur_branch inj conflicts) }
| otherwise
= return ()
@@ -1388,13 +1389,10 @@ isTyFamFree = null . tcTyFamInsts
-- Error messages
-inaccessibleCoAxBranch :: TyCon -> CoAxBranch -> SDoc
-inaccessibleCoAxBranch fam_tc (CoAxBranch { cab_tvs = tvs
- , cab_lhs = lhs
- , cab_rhs = rhs })
+inaccessibleCoAxBranch :: CoAxiom br -> CoAxBranch -> SDoc
+inaccessibleCoAxBranch fi_ax cur_branch
= ptext (sLit "Type family instance equation is overlapped:") $$
- hang (pprUserForAll tvs)
- 2 (hang (pprTypeApp fam_tc lhs) 2 (equals <+> (ppr rhs)))
+ nest 2 (pprCoAxBranch fi_ax cur_branch)
tyFamInstIllegalErr :: Type -> SDoc
tyFamInstIllegalErr ty
diff --git a/compiler/types/Class.hs b/compiler/types/Class.hs
index 9daa3722b8..34f6edbcec 100644
--- a/compiler/types/Class.hs
+++ b/compiler/types/Class.hs
@@ -290,7 +290,7 @@ instance Outputable DefMeth where
pprFundeps :: Outputable a => [FunDep a] -> SDoc
pprFundeps [] = empty
-pprFundeps fds = hsep (ptext (sLit "|") : punctuate comma (map pprFunDep fds))
+pprFundeps fds = hsep (vbar : punctuate comma (map pprFunDep fds))
pprFunDep :: Outputable a => FunDep a -> SDoc
pprFunDep (us, vs) = hsep [interppSP us, ptext (sLit "->"), interppSP vs]
diff --git a/compiler/types/Coercion.hs b/compiler/types/Coercion.hs
index b73ca4969b..af05d5c1f8 100644
--- a/compiler/types/Coercion.hs
+++ b/compiler/types/Coercion.hs
@@ -754,29 +754,39 @@ ppr_forall_co p ty
split1 tvs ty = (reverse tvs, ty)
pprCoAxiom :: CoAxiom br -> SDoc
-pprCoAxiom ax@(CoAxiom { co_ax_tc = tc, co_ax_branches = branches })
- = hang (ptext (sLit "axiom") <+> ppr ax <+> dcolon)
- 2 (vcat (map (pprCoAxBranch tc) $ fromBranches branches))
+pprCoAxiom ax@(CoAxiom { co_ax_branches = branches })
+ = hang (text "axiom" <+> ppr ax <+> dcolon)
+ 2 (vcat (map (ppr_co_ax_branch (const ppr) ax) $ fromBranches branches))
-pprCoAxBranch :: TyCon -> CoAxBranch -> SDoc
-pprCoAxBranch fam_tc (CoAxBranch { cab_tvs = tvs
- , cab_lhs = lhs
- , cab_rhs = rhs })
- = hang (pprUserForAll tvs)
- 2 (hang (pprTypeApp fam_tc lhs) 2 (equals <+> (ppr rhs)))
+pprCoAxBranch :: CoAxiom br -> CoAxBranch -> SDoc
+pprCoAxBranch = ppr_co_ax_branch pprRhs
+ where
+ pprRhs fam_tc (TyConApp tycon _)
+ | isDataFamilyTyCon fam_tc
+ = pprDataCons tycon
+ pprRhs _ rhs = ppr rhs
pprCoAxBranchHdr :: CoAxiom br -> BranchIndex -> SDoc
-pprCoAxBranchHdr ax@(CoAxiom { co_ax_tc = fam_tc, co_ax_name = name }) index
- | CoAxBranch { cab_lhs = tys, cab_loc = loc } <- coAxiomNthBranch ax index
- = hang (pprTypeApp fam_tc tys)
- 2 (ptext (sLit "-- Defined") <+> ppr_loc loc)
+pprCoAxBranchHdr ax index = pprCoAxBranch ax (coAxiomNthBranch ax index)
+
+ppr_co_ax_branch :: (TyCon -> Type -> SDoc) -> CoAxiom br -> CoAxBranch -> SDoc
+ppr_co_ax_branch ppr_rhs
+ (CoAxiom { co_ax_tc = fam_tc, co_ax_name = name })
+ (CoAxBranch { cab_tvs = tvs
+ , cab_lhs = lhs
+ , cab_rhs = rhs
+ , cab_loc = loc })
+ = foldr1 (flip hangNotEmpty 2)
+ [ pprUserForAll tvs
+ , pprTypeApp fam_tc lhs <+> equals <+> ppr_rhs fam_tc rhs
+ , text "-- Defined" <+> pprLoc loc ]
where
- ppr_loc loc
+ pprLoc loc
| isGoodSrcSpan loc
- = ptext (sLit "at") <+> ppr (srcSpanStart loc)
+ = text "at" <+> ppr (srcSpanStart loc)
| otherwise
- = ptext (sLit "in") <+>
+ = text "in" <+>
quotes (ppr (nameModule name))
{-
diff --git a/compiler/types/TypeRep.hs b/compiler/types/TypeRep.hs
index e09c9377b6..574e15367e 100644
--- a/compiler/types/TypeRep.hs
+++ b/compiler/types/TypeRep.hs
@@ -39,6 +39,7 @@ module TypeRep (
pprKind, pprParendKind, pprTyLit, suppressKinds,
TyPrec(..), maybeParen, pprTcApp,
pprPrefixApp, pprArrowChain, ppr_type,
+ pprDataCons,
-- Free variables
tyVarsOfType, tyVarsOfTypes, closeOverKinds, varSetElemsKvsFirst,
@@ -59,7 +60,7 @@ module TypeRep (
#include "HsVersions.h"
-import {-# SOURCE #-} DataCon( dataConTyCon )
+import {-# SOURCE #-} DataCon( DataCon, dataConTyCon, dataConFullSig )
import {-# SOURCE #-} ConLike ( ConLike(..) )
import {-# SOURCE #-} Type( isPredTy ) -- Transitively pulls in a LOT of stuff, better to break the loop
@@ -77,6 +78,7 @@ import CoAxiom
import PrelNames
import Outputable
import FastString
+import ListSetOps
import Util
import DynFlags
import StaticFlags( opt_PprStyle_Debug )
@@ -693,6 +695,20 @@ remember to parenthesise the operator, thus
See Trac #2766.
-}
+pprDataCons :: TyCon -> SDoc
+pprDataCons = sepWithVBars . fmap pprDataConWithArgs . tyConDataCons
+ where
+ sepWithVBars [] = empty
+ sepWithVBars docs = sep (punctuate (space <> vbar) docs)
+
+pprDataConWithArgs :: DataCon -> SDoc
+pprDataConWithArgs dc = sep [forAllDoc, thetaDoc, ppr dc <+> argsDoc]
+ where
+ (univ_tvs, ex_tvs, eq_spec, theta, arg_tys, _res_ty) = dataConFullSig dc
+ forAllDoc = pprUserForAll ((univ_tvs `minusList` map fst eq_spec) ++ ex_tvs)
+ thetaDoc = pprThetaArrowTy theta
+ argsDoc = hsep (fmap pprParendType arg_tys)
+
pprTypeApp :: TyCon -> [Type] -> SDoc
pprTypeApp tc tys = pprTyTcApp TopPrec tc tys
-- We have to use ppr on the TyCon (not its name)
diff --git a/compiler/utils/BooleanFormula.hs b/compiler/utils/BooleanFormula.hs
index 41ac13963e..382431e549 100644
--- a/compiler/utils/BooleanFormula.hs
+++ b/compiler/utils/BooleanFormula.hs
@@ -193,7 +193,7 @@ pprBooleanFormula :: (Rational -> a -> SDoc) -> Rational -> BooleanFormula a ->
pprBooleanFormula pprVar = pprBooleanFormula' pprVar pprAnd pprOr
where
pprAnd p = cparen (p > 3) . fsep . punctuate comma
- pprOr p = cparen (p > 2) . fsep . intersperse (text "|")
+ pprOr p = cparen (p > 2) . fsep . intersperse vbar
-- Pretty print human in readable format, "either `a' or `b' or (`c', `d' and `e')"?
pprBooleanFormulaNice :: Outputable a => BooleanFormula a -> SDoc
diff --git a/compiler/utils/Outputable.hs b/compiler/utils/Outputable.hs
index 83febd5d04..fbd6760923 100644
--- a/compiler/utils/Outputable.hs
+++ b/compiler/utils/Outputable.hs
@@ -25,7 +25,7 @@ module Outputable (
int, intWithCommas, integer, float, double, rational,
parens, cparen, brackets, braces, quotes, quote,
doubleQuotes, angleBrackets, paBrackets,
- semi, comma, colon, dcolon, space, equals, dot,
+ semi, comma, colon, dcolon, space, equals, dot, vbar,
arrow, larrow, darrow, arrowt, larrowt, arrowtt, larrowtt,
lparen, rparen, lbrack, rbrack, lbrace, rbrace, underscore,
blankLine, forAllLit,
@@ -33,7 +33,7 @@ module Outputable (
($$), ($+$), vcat,
sep, cat,
fsep, fcat,
- hang, punctuate, ppWhen, ppUnless,
+ hang, hangNotEmpty, punctuate, ppWhen, ppUnless,
speakNth, speakN, speakNOf, plural, isOrAre, doOrDoes,
coloured, PprColour, colType, colCoerc, colDataCon,
@@ -521,7 +521,7 @@ quotes d =
('\'' : _, _) -> pp_d
_other -> Pretty.quotes pp_d
-semi, comma, colon, equals, space, dcolon, underscore, dot :: SDoc
+semi, comma, colon, equals, space, dcolon, underscore, dot, vbar :: SDoc
arrow, larrow, darrow, arrowt, larrowt, arrowtt, larrowtt :: SDoc
lparen, rparen, lbrack, rbrack, lbrace, rbrace, blankLine :: SDoc
@@ -541,6 +541,7 @@ equals = docToSDoc $ Pretty.equals
space = docToSDoc $ Pretty.space
underscore = char '_'
dot = char '.'
+vbar = char '|'
lparen = docToSDoc $ Pretty.lparen
rparen = docToSDoc $ Pretty.rparen
lbrack = docToSDoc $ Pretty.lbrack
@@ -606,6 +607,12 @@ hang :: SDoc -- ^ The header
-> SDoc
hang d1 n d2 = SDoc $ \sty -> Pretty.hang (runSDoc d1 sty) n (runSDoc d2 sty)
+-- | This behaves like 'hang', but does not indent the second document
+-- when the header is empty.
+hangNotEmpty :: SDoc -> Int -> SDoc -> SDoc
+hangNotEmpty d1 n d2 =
+ SDoc $ \sty -> Pretty.hangNotEmpty (runSDoc d1 sty) n (runSDoc d2 sty)
+
punctuate :: SDoc -- ^ The punctuation
-> [SDoc] -- ^ The list that will have punctuation added between every adjacent pair of elements
-> [SDoc] -- ^ Punctuated list
diff --git a/compiler/utils/Pretty.hs b/compiler/utils/Pretty.hs
index 4aae2c8c53..74d69f23d0 100644
--- a/compiler/utils/Pretty.hs
+++ b/compiler/utils/Pretty.hs
@@ -180,7 +180,7 @@ module Pretty (
sep, cat,
fsep, fcat,
nest,
- hang, punctuate,
+ hang, hangNotEmpty, punctuate,
-- * Predicates on documents
isEmpty,
@@ -563,6 +563,12 @@ nest k p = mkNest k (reduceDoc p)
hang :: Doc -> Int -> Doc -> Doc
hang d1 n d2 = sep [d1, nest n d2]
+-- | Apply 'hang' to the arguments if the first 'Doc' is not empty.
+hangNotEmpty :: Doc -> Int -> Doc -> Doc
+hangNotEmpty d1 n d2 = if isEmpty d1
+ then d2
+ else hang d1 n d2
+
-- | @punctuate p [d1, ... dn] = [d1 \<> p, d2 \<> p, ... dn-1 \<> p, dn]@
punctuate :: Doc -> [Doc] -> [Doc]
punctuate _ [] = []
diff --git a/testsuite/tests/ghci/scripts/T6018ghcifail.stderr b/testsuite/tests/ghci/scripts/T6018ghcifail.stderr
index d1ebe58007..ff97c50957 100644
--- a/testsuite/tests/ghci/scripts/T6018ghcifail.stderr
+++ b/testsuite/tests/ghci/scripts/T6018ghcifail.stderr
@@ -1,62 +1,63 @@
<interactive>:10:15: error:
Type family equations violate injectivity annotation:
- F Char Bool Int = Int
- F Bool Int Char = Int
+ F Char Bool Int = Int -- Defined at <interactive>:10:15
+ F Bool Int Char = Int -- Defined at <interactive>:11:15
<interactive>:16:15: error:
Type family equations violate injectivity annotation:
- I Int Char Bool = Bool
- I Int Int Int = Bool
+ I Int Char Bool = Bool -- Defined at <interactive>:16:15
+ I Int Int Int = Bool -- Defined at <interactive>:17:15
<interactive>:26:15: error:
Type family equation violates injectivity annotation.
RHS of injective type family equation cannot be a type family:
- IdProxy a = Id a
+ IdProxy a = Id a -- Defined at <interactive>:26:15
<interactive>:34:15: error:
Type family equation violates injectivity annotation.
RHS of injective type family equation is a bare type variable
but these LHS type and kind patterns are not bare variables: ‘'Z’
- P 'Z m = m
+ P 'Z m = m -- Defined at <interactive>:34:15
<interactive>:40:15: error:
Type family equation violates injectivity annotation.
Type variable ‘b’ cannot be inferred from the right-hand side.
In the type family equation:
- J Int b c = Char
+ J Int b c = Char -- Defined at <interactive>:40:15
<interactive>:44:15: error:
Type family equation violates injectivity annotation.
Type variable ‘n’ cannot be inferred from the right-hand side.
In the type family equation:
- K ('S n) m = 'S m
+ K ('S n) m = 'S m -- Defined at <interactive>:44:15
<interactive>:49:15: error:
Type family equation violates injectivity annotation.
RHS of injective type family equation cannot be a type family:
- L a = MaybeSyn a
+ L a = MaybeSyn a -- Defined at <interactive>:49:15
<interactive>:55:41: error:
Type family equation violates injectivity annotation.
Kind variable ‘k’ cannot be inferred from the right-hand side.
(enabling -fprint-explicit-kinds might help)
In the type family equation:
- PolyKindVarsF '[] = '[]
+ PolyKindVarsF '[] = '[] -- Defined at <interactive>:55:41
<interactive>:60:15: error:
Type family equation violates injectivity annotation.
Kind variable ‘k1’ cannot be inferred from the right-hand side.
(enabling -fprint-explicit-kinds might help)
In the type family equation:
- PolyKindVars '[] = '[]
+ PolyKindVars '[] = '[] -- Defined at <interactive>:60:15
<interactive>:64:15: error:
Type family equation violates injectivity annotation.
Kind variable ‘k’ cannot be inferred from the right-hand side.
(enabling -fprint-explicit-kinds might help)
In the type family equation:
- forall (k :: BOX) (a :: k) (b :: k). Fc a b = Int
+ forall (k :: BOX) (a :: k) (b :: k).
+ Fc a b = Int -- Defined at <interactive>:64:15
<interactive>:68:15: error:
Type family equation violates injectivity annotation.
@@ -64,52 +65,53 @@
cannot be inferred from the right-hand side.
(enabling -fprint-explicit-kinds might help)
In the type family equation:
- forall (k :: BOX) (a :: k) (b :: k). Gc a b = Int
+ forall (k :: BOX) (a :: k) (b :: k).
+ Gc a b = Int -- Defined at <interactive>:68:15
<interactive>:81:15: error:
Type family equations violate injectivity annotation:
- F1 [a] = Maybe (GF1 a)
- F1 (Maybe a) = Maybe (GF2 a)
+ F1 [a] = Maybe (GF1 a) -- Defined at <interactive>:81:15
+ F1 (Maybe a) = Maybe (GF2 a) -- Defined at <interactive>:82:15
<interactive>:85:15: error:
Type family equation violates injectivity annotation.
RHS of injective type family equation is a bare type variable
but these LHS type and kind patterns are not bare variables: ‘[a]’
- W1 [a] = a
+ W1 [a] = a -- Defined at <interactive>:85:15
<interactive>:88:15: error:
Type family equation violates injectivity annotation.
RHS of injective type family equation cannot be a type family:
- W2 [a] = W2 a
+ W2 [a] = W2 a -- Defined at <interactive>:88:15
<interactive>:92:15: error:
Type family equations violate injectivity annotation:
- Z1 [a] = (a, a)
- Z1 (Maybe b) = (b, [b])
+ Z1 [a] = (a, a) -- Defined at <interactive>:92:15
+ Z1 (Maybe b) = (b, [b]) -- Defined at <interactive>:93:15
<interactive>:96:15: error:
Type family equations violate injectivity annotation:
- G1 [a] = [a]
- G1 (Maybe b) = [(b, b)]
+ G1 [a] = [a] -- Defined at <interactive>:96:15
+ G1 (Maybe b) = [(b, b)] -- Defined at <interactive>:97:15
<interactive>:100:15: error:
Type family equations violate injectivity annotation:
- G3 a Int = (a, Int)
- G3 a Bool = (Bool, a)
+ G3 a Int = (a, Int) -- Defined at <interactive>:100:15
+ G3 a Bool = (Bool, a) -- Defined at <interactive>:101:15
<interactive>:104:15: error:
Type family equation violates injectivity annotation.
Type variable ‘b’ cannot be inferred from the right-hand side.
In the type family equation:
- G4 a b = [a]
+ G4 a b = [a] -- Defined at <interactive>:104:15
<interactive>:107:15: error:
Type family equations violate injectivity annotation:
- G5 [a] = [GF1 a]
- G5 Int = [Bool]
+ G5 [a] = [GF1 a] -- Defined at <interactive>:107:15
+ G5 Int = [Bool] -- Defined at <interactive>:108:15
<interactive>:111:15: error:
Type family equation violates injectivity annotation.
Type variable ‘a’ cannot be inferred from the right-hand side.
In the type family equation:
- G6 [a] = [HF1 a]
+ G6 [a] = [HF1 a] -- Defined at <interactive>:111:15
diff --git a/testsuite/tests/indexed-types/should_compile/T3017.stderr b/testsuite/tests/indexed-types/should_compile/T3017.stderr
index 0c31399360..d47accbe20 100644
--- a/testsuite/tests/indexed-types/should_compile/T3017.stderr
+++ b/testsuite/tests/indexed-types/should_compile/T3017.stderr
@@ -11,7 +11,8 @@ TYPE CONSTRUCTORS
data ListColl a = L [a]
Promotable
COERCION AXIOMS
- axiom Foo.TFCo:R:ElemListColl :: Elem (ListColl a) = a
+ axiom Foo.TFCo:R:ElemListColl ::
+ Elem (ListColl a) = a -- Defined at T3017.hs:13:9
INSTANCES
instance Coll (ListColl a) -- Defined at T3017.hs:12:11
FAMILY INSTANCES
diff --git a/testsuite/tests/indexed-types/should_compile/T9085.stderr b/testsuite/tests/indexed-types/should_compile/T9085.stderr
index 8a4ebdbb7a..79ecd91e28 100644
--- a/testsuite/tests/indexed-types/should_compile/T9085.stderr
+++ b/testsuite/tests/indexed-types/should_compile/T9085.stderr
@@ -1,4 +1,4 @@
T9085.hs:7:3: Warning:
Type family instance equation is overlapped:
- F Bool = Bool
+ F Bool = Bool -- Defined at T9085.hs:7:3
diff --git a/testsuite/tests/indexed-types/should_fail/NoGood.stderr b/testsuite/tests/indexed-types/should_fail/NoGood.stderr
index bfb5814f8d..c4adb9ae9d 100644
--- a/testsuite/tests/indexed-types/should_fail/NoGood.stderr
+++ b/testsuite/tests/indexed-types/should_fail/NoGood.stderr
@@ -1,5 +1,5 @@
NoGood.hs:4:15:
Conflicting family instance declarations:
- F a a -- Defined at NoGood.hs:4:15
- F [a] a -- Defined at NoGood.hs:5:15
+ F a a = Int -- Defined at NoGood.hs:4:15
+ F [a] a = Bool -- Defined at NoGood.hs:5:15
diff --git a/testsuite/tests/indexed-types/should_fail/Over.stderr b/testsuite/tests/indexed-types/should_fail/Over.stderr
index 3eef32231b..180bb954ef 100644
--- a/testsuite/tests/indexed-types/should_fail/Over.stderr
+++ b/testsuite/tests/indexed-types/should_fail/Over.stderr
@@ -1,10 +1,10 @@
OverB.hs:7:15:
Conflicting family instance declarations:
- OverA.C [Int] [a] -- Defined at OverB.hs:7:15
- OverA.C [a] [Int] -- Defined at OverC.hs:7:15
+ OverA.C [Int] [a] = CListList2 -- Defined at OverB.hs:7:15
+ OverA.C [a] [Int] = C9ListList -- Defined at OverC.hs:7:15
OverB.hs:9:15:
Conflicting family instance declarations:
- OverA.D [Int] [a] -- Defined at OverB.hs:9:15
- OverA.D [a] [Int] -- Defined at OverC.hs:9:15
+ OverA.D [Int] [a] = Int -- Defined at OverB.hs:9:15
+ OverA.D [a] [Int] = Char -- Defined at OverC.hs:9:15
diff --git a/testsuite/tests/indexed-types/should_fail/SimpleFail11a.stderr b/testsuite/tests/indexed-types/should_fail/SimpleFail11a.stderr
index 2e6b9570ed..d467019760 100644
--- a/testsuite/tests/indexed-types/should_fail/SimpleFail11a.stderr
+++ b/testsuite/tests/indexed-types/should_fail/SimpleFail11a.stderr
@@ -1,10 +1,10 @@
SimpleFail11a.hs:6:15:
Conflicting family instance declarations:
- C9 Int Int -- Defined at SimpleFail11a.hs:6:15
- C9 Int Int -- Defined at SimpleFail11a.hs:8:15
+ C9 Int Int = C9IntInt -- Defined at SimpleFail11a.hs:6:15
+ C9 Int Int = C9IntInt2 -- Defined at SimpleFail11a.hs:8:15
SimpleFail11a.hs:11:15:
Conflicting family instance declarations:
- D9 Int Int -- Defined at SimpleFail11a.hs:11:15
- D9 Int Int -- Defined at SimpleFail11a.hs:13:15
+ D9 Int Int = Char -- Defined at SimpleFail11a.hs:11:15
+ D9 Int Int = Int -- Defined at SimpleFail11a.hs:13:15
diff --git a/testsuite/tests/indexed-types/should_fail/SimpleFail11b.stderr b/testsuite/tests/indexed-types/should_fail/SimpleFail11b.stderr
index 6994b9bcd9..e40a3a6b4e 100644
--- a/testsuite/tests/indexed-types/should_fail/SimpleFail11b.stderr
+++ b/testsuite/tests/indexed-types/should_fail/SimpleFail11b.stderr
@@ -1,10 +1,10 @@
SimpleFail11b.hs:7:15:
Conflicting family instance declarations:
- C9 [a] Int -- Defined at SimpleFail11b.hs:7:15
- C9 [a] Int -- Defined at SimpleFail11b.hs:9:15
+ C9 [a] Int = C9ListInt -- Defined at SimpleFail11b.hs:7:15
+ C9 [a] Int = C9ListInt2 -- Defined at SimpleFail11b.hs:9:15
SimpleFail11b.hs:13:15:
Conflicting family instance declarations:
- D9 [a] Int -- Defined at SimpleFail11b.hs:13:15
- D9 [a] Int -- Defined at SimpleFail11b.hs:15:15
+ D9 [a] Int = [a] -- Defined at SimpleFail11b.hs:13:15
+ D9 [a] Int = Maybe a -- Defined at SimpleFail11b.hs:15:15
diff --git a/testsuite/tests/indexed-types/should_fail/SimpleFail11c.stderr b/testsuite/tests/indexed-types/should_fail/SimpleFail11c.stderr
index a323efa250..d4a1bb4f30 100644
--- a/testsuite/tests/indexed-types/should_fail/SimpleFail11c.stderr
+++ b/testsuite/tests/indexed-types/should_fail/SimpleFail11c.stderr
@@ -1,10 +1,10 @@
SimpleFail11c.hs:7:15:
Conflicting family instance declarations:
- C9 [a] Int -- Defined at SimpleFail11c.hs:7:15
- C9 [Int] Int -- Defined at SimpleFail11c.hs:9:15
+ C9 [a] Int = C9ListInt -- Defined at SimpleFail11c.hs:7:15
+ C9 [Int] Int = C9ListInt2 -- Defined at SimpleFail11c.hs:9:15
SimpleFail11c.hs:13:15:
Conflicting family instance declarations:
- D9 [a] Int -- Defined at SimpleFail11c.hs:13:15
- D9 [Int] Int -- Defined at SimpleFail11c.hs:15:15
+ D9 [a] Int = [a] -- Defined at SimpleFail11c.hs:13:15
+ D9 [Int] Int = [Bool] -- Defined at SimpleFail11c.hs:15:15
diff --git a/testsuite/tests/indexed-types/should_fail/SimpleFail11d.stderr b/testsuite/tests/indexed-types/should_fail/SimpleFail11d.stderr
index 72a9f79453..cdd8afda96 100644
--- a/testsuite/tests/indexed-types/should_fail/SimpleFail11d.stderr
+++ b/testsuite/tests/indexed-types/should_fail/SimpleFail11d.stderr
@@ -1,5 +1,5 @@
SimpleFail11d.hs:8:15:
Conflicting family instance declarations:
- C9 [Int] [a] -- Defined at SimpleFail11d.hs:8:15
- C9 [a] [Int] -- Defined at SimpleFail11d.hs:10:15
+ C9 [Int] [a] = C9ListList2 -- Defined at SimpleFail11d.hs:8:15
+ C9 [a] [Int] = C9ListList -- Defined at SimpleFail11d.hs:10:15
diff --git a/testsuite/tests/indexed-types/should_fail/SimpleFail2b.stderr b/testsuite/tests/indexed-types/should_fail/SimpleFail2b.stderr
index 1b63dfe3f5..bb0aaca16c 100644
--- a/testsuite/tests/indexed-types/should_fail/SimpleFail2b.stderr
+++ b/testsuite/tests/indexed-types/should_fail/SimpleFail2b.stderr
@@ -1,5 +1,5 @@
SimpleFail2b.hs:9:11:
Conflicting family instance declarations:
- Sd Int -- Defined at SimpleFail2b.hs:9:11
- Sd Int -- Defined at SimpleFail2b.hs:10:11
+ Sd Int = SdC1 Char -- Defined at SimpleFail2b.hs:9:11
+ Sd Int = SdC2 Char -- Defined at SimpleFail2b.hs:10:11
diff --git a/testsuite/tests/indexed-types/should_fail/T2334A.stderr b/testsuite/tests/indexed-types/should_fail/T2334A.stderr
index 6b4197bfb4..7b7d265d61 100644
--- a/testsuite/tests/indexed-types/should_fail/T2334A.stderr
+++ b/testsuite/tests/indexed-types/should_fail/T2334A.stderr
@@ -13,5 +13,5 @@ T2334A.hs:10:27:
T2334A.hs:12:15:
Conflicting family instance declarations:
- F Bool -- Defined at T2334A.hs:12:15
- F Bool -- Defined at T2334A.hs:13:15
+ F Bool = K1 -- Defined at T2334A.hs:12:15
+ F Bool = K2 -- Defined at T2334A.hs:13:15
diff --git a/testsuite/tests/indexed-types/should_fail/T2677.stderr b/testsuite/tests/indexed-types/should_fail/T2677.stderr
index fcc6f8aaf9..1f08b366b1 100644
--- a/testsuite/tests/indexed-types/should_fail/T2677.stderr
+++ b/testsuite/tests/indexed-types/should_fail/T2677.stderr
@@ -1,5 +1,5 @@
T2677.hs:6:15:
Conflicting family instance declarations:
- A a -- Defined at T2677.hs:6:15
- A Int -- Defined at T2677.hs:7:15
+ A a = Bool -- Defined at T2677.hs:6:15
+ A Int = Char -- Defined at T2677.hs:7:15
diff --git a/testsuite/tests/indexed-types/should_fail/T3330b.stderr b/testsuite/tests/indexed-types/should_fail/T3330b.stderr
index 5f06978d1c..faa5d1a1a7 100644
--- a/testsuite/tests/indexed-types/should_fail/T3330b.stderr
+++ b/testsuite/tests/indexed-types/should_fail/T3330b.stderr
@@ -1,5 +1,5 @@
T3330b.hs:14:10:
Conflicting family instance declarations:
- Res c a b -- Defined at T3330b.hs:14:10
- Res [c] a b -- Defined at T3330b.hs:18:10
+ Res c a b = b -- Defined at T3330b.hs:14:10
+ Res [c] a b = [b] -- Defined at T3330b.hs:18:10
diff --git a/testsuite/tests/indexed-types/should_fail/T4246.stderr b/testsuite/tests/indexed-types/should_fail/T4246.stderr
index 26e967a672..b653f9a052 100644
--- a/testsuite/tests/indexed-types/should_fail/T4246.stderr
+++ b/testsuite/tests/indexed-types/should_fail/T4246.stderr
@@ -1,10 +1,10 @@
T4246.hs:8:9:
Conflicting family instance declarations:
- F a -- Defined at T4246.hs:8:9
- F Int -- Defined at T4246.hs:11:9
+ F a = a -- Defined at T4246.hs:8:9
+ F Int = Bool -- Defined at T4246.hs:11:9
T4246.hs:14:15:
Conflicting family instance declarations:
- G Int -- Defined at T4246.hs:14:15
- G Int -- Defined at T4246.hs:15:15
+ G Int = Int -- Defined at T4246.hs:14:15
+ G Int = Bool -- Defined at T4246.hs:15:15
diff --git a/testsuite/tests/indexed-types/should_fail/T9371.stderr b/testsuite/tests/indexed-types/should_fail/T9371.stderr
index 695a7b4142..729ee3a8c0 100644
--- a/testsuite/tests/indexed-types/should_fail/T9371.stderr
+++ b/testsuite/tests/indexed-types/should_fail/T9371.stderr
@@ -1,5 +1,5 @@
T9371.hs:14:10:
Conflicting family instance declarations:
- D -- Defined at T9371.hs:14:10
- D (x, y) -- Defined at T9371.hs:18:10
+ D = D1 (Either x ()) -- Defined at T9371.hs:14:10
+ D (x, y) = D2 (x, y) -- Defined at T9371.hs:18:10
diff --git a/testsuite/tests/partial-sigs/should_compile/DataFamilyInstanceLHS.stderr b/testsuite/tests/partial-sigs/should_compile/DataFamilyInstanceLHS.stderr
index dd1de7ed3b..ec41b123f1 100644
--- a/testsuite/tests/partial-sigs/should_compile/DataFamilyInstanceLHS.stderr
+++ b/testsuite/tests/partial-sigs/should_compile/DataFamilyInstanceLHS.stderr
@@ -6,7 +6,8 @@ TYPE CONSTRUCTORS
data family Sing (a :: k)
COERCION AXIOMS
axiom DataFamilyInstanceLHS.TFCo:R:SingMyKind_ ::
- Sing = DataFamilyInstanceLHS.R:SingMyKind_
+ Sing = DataFamilyInstanceLHS.R:SingMyKind_
+ -- Defined at DataFamilyInstanceLHS.hs:8:15
FAMILY INSTANCES
data instance Sing
Dependent modules: []
diff --git a/testsuite/tests/partial-sigs/should_compile/TypeFamilyInstanceLHS.stderr b/testsuite/tests/partial-sigs/should_compile/TypeFamilyInstanceLHS.stderr
index 44f05a7a68..ebd327c98f 100644
--- a/testsuite/tests/partial-sigs/should_compile/TypeFamilyInstanceLHS.stderr
+++ b/testsuite/tests/partial-sigs/should_compile/TypeFamilyInstanceLHS.stderr
@@ -3,8 +3,10 @@ TYPE SIGNATURES
TYPE CONSTRUCTORS
type family F a b :: * open
COERCION AXIOMS
- axiom TypeFamilyInstanceLHS.TFCo:R:FBool_ :: F Bool _ = Bool
- axiom TypeFamilyInstanceLHS.TFCo:R:FInt_ :: F Int _ = Int
+ axiom TypeFamilyInstanceLHS.TFCo:R:FBool_ ::
+ F Bool _ = Bool -- Defined at TypeFamilyInstanceLHS.hs:6:15
+ axiom TypeFamilyInstanceLHS.TFCo:R:FInt_ ::
+ F Int _ = Int -- Defined at TypeFamilyInstanceLHS.hs:5:15
FAMILY INSTANCES
type instance F Int _
type instance F Bool _
diff --git a/testsuite/tests/polykinds/T7524.stderr b/testsuite/tests/polykinds/T7524.stderr
index 3a38ed4d33..83b355e312 100644
--- a/testsuite/tests/polykinds/T7524.stderr
+++ b/testsuite/tests/polykinds/T7524.stderr
@@ -1,5 +1,6 @@
T7524.hs:5:15:
Conflicting family instance declarations:
- F a a -- Defined at T7524.hs:5:15
- F a b -- Defined at T7524.hs:6:15
+ forall (k :: BOX) (a :: k). F a a = Int -- Defined at T7524.hs:5:15
+ forall (k :: BOX) (k1 :: BOX) (a :: k) (b :: k1).
+ F a b = Bool -- Defined at T7524.hs:6:15
diff --git a/testsuite/tests/roles/should_compile/Roles14.stderr b/testsuite/tests/roles/should_compile/Roles14.stderr
index ca1f817d15..08e3b8c504 100644
--- a/testsuite/tests/roles/should_compile/Roles14.stderr
+++ b/testsuite/tests/roles/should_compile/Roles14.stderr
@@ -5,7 +5,7 @@ TYPE CONSTRUCTORS
meth2 :: a -> a
{-# MINIMAL meth2 #-}
COERCION AXIOMS
- axiom Roles12.NTCo:C2 :: C2 a = a -> a
+ axiom Roles12.NTCo:C2 :: C2 a = a -> a -- Defined at Roles14.hs:6:1
Dependent modules: []
Dependent packages: [base-4.9.0.0, ghc-prim-0.5.0.0,
integer-gmp-1.0.0.0]
diff --git a/testsuite/tests/roles/should_compile/Roles3.stderr b/testsuite/tests/roles/should_compile/Roles3.stderr
index b44929979d..f09760224a 100644
--- a/testsuite/tests/roles/should_compile/Roles3.stderr
+++ b/testsuite/tests/roles/should_compile/Roles3.stderr
@@ -17,10 +17,13 @@ TYPE CONSTRUCTORS
type Syn1 a = F4 a
type Syn2 a = [a]
COERCION AXIOMS
- axiom Roles3.NTCo:C1 :: C1 a = a -> a
- axiom Roles3.NTCo:C2 :: C2 a b = (a ~ b) => a -> b
- axiom Roles3.NTCo:C3 :: C3 a b = a -> F3 b -> F3 b
- axiom Roles3.NTCo:C4 :: C4 a b = a -> F4 b -> F4 b
+ axiom Roles3.NTCo:C1 :: C1 a = a -> a -- Defined at Roles3.hs:6:1
+ axiom Roles3.NTCo:C2 ::
+ C2 a b = (a ~ b) => a -> b -- Defined at Roles3.hs:9:1
+ axiom Roles3.NTCo:C3 ::
+ C3 a b = a -> F3 b -> F3 b -- Defined at Roles3.hs:12:1
+ axiom Roles3.NTCo:C4 ::
+ C4 a b = a -> F4 b -> F4 b -- Defined at Roles3.hs:18:1
Dependent modules: []
Dependent packages: [base-4.9.0.0, ghc-prim-0.5.0.0,
integer-gmp-1.0.0.0]
diff --git a/testsuite/tests/roles/should_compile/Roles4.stderr b/testsuite/tests/roles/should_compile/Roles4.stderr
index bcc1f44460..67b75cde86 100644
--- a/testsuite/tests/roles/should_compile/Roles4.stderr
+++ b/testsuite/tests/roles/should_compile/Roles4.stderr
@@ -8,8 +8,9 @@ TYPE CONSTRUCTORS
{-# MINIMAL meth3 #-}
type Syn1 a = [a]
COERCION AXIOMS
- axiom Roles4.NTCo:C1 :: C1 a = a -> a
- axiom Roles4.NTCo:C3 :: C3 a = a -> Syn1 a
+ axiom Roles4.NTCo:C1 :: C1 a = a -> a -- Defined at Roles4.hs:6:1
+ axiom Roles4.NTCo:C3 ::
+ C3 a = a -> Syn1 a -- Defined at Roles4.hs:11:1
Dependent modules: []
Dependent packages: [base-4.9.0.0, ghc-prim-0.5.0.0,
integer-gmp-1.0.0.0]
diff --git a/testsuite/tests/roles/should_compile/T8958.stderr b/testsuite/tests/roles/should_compile/T8958.stderr
index 7d59803880..efb7488564 100644
--- a/testsuite/tests/roles/should_compile/T8958.stderr
+++ b/testsuite/tests/roles/should_compile/T8958.stderr
@@ -10,7 +10,8 @@ TYPE CONSTRUCTORS
type role Representational representational
class Representational a
COERCION AXIOMS
- axiom T8958.NTCo:Map :: Map k v = [(k, v)]
+ axiom T8958.NTCo:Map ::
+ Map k v = [(k, v)] -- Defined at T8958.hs:13:1
INSTANCES
instance [incoherent] Nominal a -- Defined at T8958.hs:7:10
instance [incoherent] Representational a
diff --git a/testsuite/tests/th/T6018th.stderr b/testsuite/tests/th/T6018th.stderr
index 4579ea54c3..7193fb5948 100644
--- a/testsuite/tests/th/T6018th.stderr
+++ b/testsuite/tests/th/T6018th.stderr
@@ -1,5 +1,5 @@
T6018th.hs:97:4:
Type family equations violate injectivity annotation:
- H Int Int Int = Bool
- H Int Char Bool = Bool
+ H Int Int Int = Bool -- Defined at T6018th.hs:97:4
+ H Int Char Bool = Bool -- Defined at T6018th.hs:97:4
diff --git a/testsuite/tests/typecheck/should_compile/T6018.stderr b/testsuite/tests/typecheck/should_compile/T6018.stderr
index 41e94d8670..b843f5f53d 100644
--- a/testsuite/tests/typecheck/should_compile/T6018.stderr
+++ b/testsuite/tests/typecheck/should_compile/T6018.stderr
@@ -4,8 +4,8 @@
T6018.hs:75:5: Warning:
Type family instance equation is overlapped:
- Foo Bool = Bool
+ Foo Bool = Bool -- Defined at T6018.hs:75:5
T6018.hs:82:5: Warning:
Type family instance equation is overlapped:
- Bar Bool = Char
+ Bar Bool = Char -- Defined at T6018.hs:82:5
diff --git a/testsuite/tests/typecheck/should_compile/tc231.stderr b/testsuite/tests/typecheck/should_compile/tc231.stderr
index b71342335b..2377c13a0f 100644
--- a/testsuite/tests/typecheck/should_compile/tc231.stderr
+++ b/testsuite/tests/typecheck/should_compile/tc231.stderr
@@ -14,7 +14,8 @@ TYPE CONSTRUCTORS
{-# MINIMAL huh #-}
COERCION AXIOMS
axiom NTCo:Zork ::
- Zork s a b = forall chain. Q s a chain -> ST s ()
+ Zork s a b = forall chain. Q s a chain -> ST s ()
+ -- Defined at tc231.hs:25:1
Dependent modules: []
Dependent packages: [base-4.9.0.0, ghc-prim-0.5.0.0,
integer-gmp-1.0.0.0]
diff --git a/testsuite/tests/typecheck/should_compile/tc265.stderr b/testsuite/tests/typecheck/should_compile/tc265.stderr
index 64099721b8..24aeed0392 100644
--- a/testsuite/tests/typecheck/should_compile/tc265.stderr
+++ b/testsuite/tests/typecheck/should_compile/tc265.stderr
@@ -1,4 +1,4 @@
tc265.hs:8:3: warning:
Type family instance equation is overlapped:
- F (T Int) = Bool
+ F (T Int) = Bool -- Defined at tc265.hs:8:3
diff --git a/testsuite/tests/typecheck/should_fail/T10836.stderr b/testsuite/tests/typecheck/should_fail/T10836.stderr
index b96d3714e2..2e92e6135a 100644
--- a/testsuite/tests/typecheck/should_fail/T10836.stderr
+++ b/testsuite/tests/typecheck/should_fail/T10836.stderr
@@ -1,14 +1,14 @@
T10836.hs:5:5: error:
Type family equations violate injectivity annotation:
- Foo Int = Int
- Foo Bool = Int
+ Foo Int = Int -- Defined at T10836.hs:5:5
+ Foo Bool = Int -- Defined at T10836.hs:6:5
In the equations for closed type family ‘Foo’
In the type family declaration for ‘Foo’
T10836.hs:9:5: error:
Type family equations violate injectivity annotation:
- Bar Int = Int
- Bar Bool = Int
+ Bar Int = Int -- Defined at T10836.hs:9:5
+ Bar Bool = Int -- Defined at T10836.hs:10:5
In the equations for closed type family ‘Bar’
In the type family declaration for ‘Bar’
diff --git a/testsuite/tests/typecheck/should_fail/T6018fail.stderr b/testsuite/tests/typecheck/should_fail/T6018fail.stderr
index a86ad808c8..a0f5439a7d 100644
--- a/testsuite/tests/typecheck/should_fail/T6018fail.stderr
+++ b/testsuite/tests/typecheck/should_fail/T6018fail.stderr
@@ -6,77 +6,78 @@
T6018Afail.hs:7:15: error:
Type family equations violate injectivity annotation:
- G Char Bool Int = Int
- G Bool Int Char = Int
+ G Char Bool Int = Int -- Defined at T6018Afail.hs:7:15
+ G Bool Int Char = Int -- Defined at T6018fail.hs:15:15
T6018Dfail.hs:7:15: error:
Type family equations violate injectivity annotation:
- T6018Bfail.H Bool Int Char = Int
- T6018Bfail.H Char Bool Int = Int
+ T6018Bfail.H Bool Int Char = Int -- Defined at T6018Dfail.hs:7:15
+ T6018Bfail.H Char Bool Int = Int -- Defined at T6018Cfail.hs:8:15
T6018fail.hs:13:15: error:
Type family equations violate injectivity annotation:
- F Bool Int Char = Int
- F Char Bool Int = Int
+ F Bool Int Char = Int -- Defined at T6018fail.hs:13:15
+ F Char Bool Int = Int -- Defined at T6018fail.hs:12:15
T6018fail.hs:19:15: error:
Type family equations violate injectivity annotation:
- I Int Int Int = Bool
- I Int Char Bool = Bool
+ I Int Int Int = Bool -- Defined at T6018fail.hs:19:15
+ I Int Char Bool = Bool -- Defined at T6018fail.hs:18:15
T6018fail.hs:28:15: error:
Type family equation violates injectivity annotation.
RHS of injective type family equation cannot be a type family:
- IdProxy a = Id a
+ IdProxy a = Id a -- Defined at T6018fail.hs:28:15
T6018fail.hs:36:15: error:
Type family equation violates injectivity annotation.
RHS of injective type family equation is a bare type variable
but these LHS type and kind patterns are not bare variables: ‘'Z’
- P 'Z m = m
+ P 'Z m = m -- Defined at T6018fail.hs:36:15
T6018fail.hs:37:15: error:
Type family equations violate injectivity annotation:
- P ('S n) m = 'S (P n m)
- P 'Z m = m
+ P ('S n) m = 'S (P n m) -- Defined at T6018fail.hs:37:15
+ P 'Z m = m -- Defined at T6018fail.hs:36:15
T6018fail.hs:42:15: error:
Type family equation violates injectivity annotation.
Type variable ‘b’ cannot be inferred from the right-hand side.
In the type family equation:
- J Int b c = Char
+ J Int b c = Char -- Defined at T6018fail.hs:42:15
T6018fail.hs:46:15: error:
Type family equation violates injectivity annotation.
Type variable ‘n’ cannot be inferred from the right-hand side.
In the type family equation:
- K ('S n) m = 'S m
+ K ('S n) m = 'S m -- Defined at T6018fail.hs:46:15
T6018fail.hs:51:15: error:
Type family equation violates injectivity annotation.
RHS of injective type family equation cannot be a type family:
- L a = MaybeSyn a
+ L a = MaybeSyn a -- Defined at T6018fail.hs:51:15
T6018fail.hs:59:10: error:
Type family equation violates injectivity annotation.
Kind variable ‘k’ cannot be inferred from the right-hand side.
(enabling -fprint-explicit-kinds might help)
In the type family equation:
- PolyKindVarsF '[] = '[]
+ PolyKindVarsF '[] = '[] -- Defined at T6018fail.hs:59:10
T6018fail.hs:62:15: error:
Type family equation violates injectivity annotation.
Kind variable ‘k1’ cannot be inferred from the right-hand side.
(enabling -fprint-explicit-kinds might help)
In the type family equation:
- PolyKindVars '[] = '[]
+ PolyKindVars '[] = '[] -- Defined at T6018fail.hs:62:15
T6018fail.hs:66:15: error:
Type family equation violates injectivity annotation.
Kind variable ‘k’ cannot be inferred from the right-hand side.
(enabling -fprint-explicit-kinds might help)
In the type family equation:
- forall (k :: BOX) (a :: k) (b :: k). Fc a b = Int
+ forall (k :: BOX) (a :: k) (b :: k).
+ Fc a b = Int -- Defined at T6018fail.hs:66:15
T6018fail.hs:70:15: error:
Type family equation violates injectivity annotation.
@@ -84,55 +85,56 @@ T6018fail.hs:70:15: error:
cannot be inferred from the right-hand side.
(enabling -fprint-explicit-kinds might help)
In the type family equation:
- forall (k :: BOX) (a :: k) (b :: k). Gc a b = Int
+ forall (k :: BOX) (a :: k) (b :: k).
+ Gc a b = Int -- Defined at T6018fail.hs:70:15
T6018fail.hs:75:15: error:
Type family equations violate injectivity annotation:
- F1 (Maybe a) = Maybe (GF2 a)
- F1 [a] = Maybe (GF1 a)
+ F1 (Maybe a) = Maybe (GF2 a) -- Defined at T6018fail.hs:75:15
+ F1 [a] = Maybe (GF1 a) -- Defined at T6018fail.hs:74:15
T6018fail.hs:87:15: error:
Type family equation violates injectivity annotation.
RHS of injective type family equation is a bare type variable
but these LHS type and kind patterns are not bare variables: ‘[a]’
- W1 [a] = a
+ W1 [a] = a -- Defined at T6018fail.hs:87:15
T6018fail.hs:90:15: error:
Type family equation violates injectivity annotation.
RHS of injective type family equation cannot be a type family:
- W2 [a] = W2 a
+ W2 [a] = W2 a -- Defined at T6018fail.hs:90:15
T6018fail.hs:95:15: error:
Type family equations violate injectivity annotation:
- Z1 (Maybe b) = (b, [b])
- Z1 [a] = (a, a)
+ Z1 (Maybe b) = (b, [b]) -- Defined at T6018fail.hs:95:15
+ Z1 [a] = (a, a) -- Defined at T6018fail.hs:94:15
T6018fail.hs:99:15: error:
Type family equations violate injectivity annotation:
- G1 (Maybe b) = [(b, b)]
- G1 [a] = [a]
+ G1 (Maybe b) = [(b, b)] -- Defined at T6018fail.hs:99:15
+ G1 [a] = [a] -- Defined at T6018fail.hs:98:15
T6018fail.hs:103:15: error:
Type family equations violate injectivity annotation:
- G3 a Bool = (Bool, a)
- G3 a Int = (a, Int)
+ G3 a Bool = (Bool, a) -- Defined at T6018fail.hs:103:15
+ G3 a Int = (a, Int) -- Defined at T6018fail.hs:102:15
T6018fail.hs:106:15: error:
Type family equation violates injectivity annotation.
Type variable ‘b’ cannot be inferred from the right-hand side.
In the type family equation:
- G4 a b = [a]
+ G4 a b = [a] -- Defined at T6018fail.hs:106:15
T6018fail.hs:110:15: error:
Type family equations violate injectivity annotation:
- G5 Int = [Bool]
- G5 [a] = [GF1 a]
+ G5 Int = [Bool] -- Defined at T6018fail.hs:110:15
+ G5 [a] = [GF1 a] -- Defined at T6018fail.hs:109:15
T6018fail.hs:113:15: error:
Type family equation violates injectivity annotation.
Type variable ‘a’ cannot be inferred from the right-hand side.
In the type family equation:
- G6 [a] = [HF1 a]
+ G6 [a] = [HF1 a] -- Defined at T6018fail.hs:113:15
T6018fail.hs:118:15: error:
Type family equation violates injectivity annotation.
@@ -140,15 +142,16 @@ T6018fail.hs:118:15: error:
cannot be inferred from the right-hand side.
(enabling -fprint-explicit-kinds might help)
In the type family equation:
- forall (k :: BOX) a b (c :: k). G7 a b c = [G7a a b c]
+ forall (k :: BOX) a b (c :: k).
+ G7 a b c = [G7a a b c] -- Defined at T6018fail.hs:118:15
T6018fail.hs:129:1: error:
Type family equations violate injectivity annotation:
- FC Int Bool = Bool
- FC Int Char = Bool
+ FC Int Bool = Bool -- Defined at T6018fail.hs:129:1
+ FC Int Char = Bool -- Defined at T6018fail.hs:125:10
T6018fail.hs:134:1: error:
Type family equation violates injectivity annotation.
RHS of injective type family equation is a bare type variable
but these LHS type and kind patterns are not bare variables: ‘*’, ‘Char’
- FC Char a = a
+ FC Char a = a -- Defined at T6018fail.hs:134:1
diff --git a/testsuite/tests/typecheck/should_fail/T6018failclosed.stderr b/testsuite/tests/typecheck/should_fail/T6018failclosed.stderr
index 674440046e..2afafbe4cd 100644
--- a/testsuite/tests/typecheck/should_fail/T6018failclosed.stderr
+++ b/testsuite/tests/typecheck/should_fail/T6018failclosed.stderr
@@ -2,7 +2,7 @@
T6018failclosed.hs:11:5: error:
Type family equation violates injectivity annotation.
RHS of injective type family equation cannot be a type family:
- IdProxyClosed a = IdClosed a
+ IdProxyClosed a = IdClosed a -- Defined at T6018failclosed.hs:11:5
In the equations for closed type family ‘IdProxyClosed’
In the type family declaration for ‘IdProxyClosed’
@@ -10,14 +10,15 @@ T6018failclosed.hs:19:5: error:
Type family equation violates injectivity annotation.
RHS of injective type family equation is a bare type variable
but these LHS type and kind patterns are not bare variables: ‘'Z’
- PClosed 'Z m = m
+ PClosed 'Z m = m -- Defined at T6018failclosed.hs:19:5
In the equations for closed type family ‘PClosed’
In the type family declaration for ‘PClosed’
T6018failclosed.hs:19:5: error:
Type family equations violate injectivity annotation:
- PClosed 'Z m = m
+ PClosed 'Z m = m -- Defined at T6018failclosed.hs:19:5
PClosed ('S n) m = 'S (PClosed n m)
+ -- Defined at T6018failclosed.hs:20:5
In the equations for closed type family ‘PClosed’
In the type family declaration for ‘PClosed’
@@ -27,8 +28,8 @@ T6018failclosed.hs:25:5: error:
cannot be inferred from the right-hand side.
(enabling -fprint-explicit-kinds might help)
In the type family equation:
- forall (k :: BOX) (k1 :: BOX) (b :: k) (c :: k1).
- JClosed Int b c = Char
+ forall (k :: BOX) (k1 :: BOX) (b :: k) (c :: k1).
+ JClosed Int b c = Char -- Defined at T6018failclosed.hs:25:5
In the equations for closed type family ‘JClosed’
In the type family declaration for ‘JClosed’
@@ -36,28 +37,29 @@ T6018failclosed.hs:30:5: error:
Type family equation violates injectivity annotation.
Type variable ‘n’ cannot be inferred from the right-hand side.
In the type family equation:
- KClosed ('S n) m = 'S m
+ KClosed ('S n) m = 'S m -- Defined at T6018failclosed.hs:30:5
In the equations for closed type family ‘KClosed’
In the type family declaration for ‘KClosed’
T6018failclosed.hs:35:5: error:
Type family equation violates injectivity annotation.
RHS of injective type family equation cannot be a type family:
- forall (k :: BOX) (a :: k). LClosed a = MaybeSynClosed a
+ forall (k :: BOX) (a :: k).
+ LClosed a = MaybeSynClosed a -- Defined at T6018failclosed.hs:35:5
In the equations for closed type family ‘LClosed’
In the type family declaration for ‘LClosed’
T6018failclosed.hs:39:5: error:
Type family equations violate injectivity annotation:
- FClosed Char Bool Int = Int
- FClosed Bool Int Char = Int
+ FClosed Char Bool Int = Int -- Defined at T6018failclosed.hs:39:5
+ FClosed Bool Int Char = Int -- Defined at T6018failclosed.hs:40:5
In the equations for closed type family ‘FClosed’
In the type family declaration for ‘FClosed’
T6018failclosed.hs:43:5: error:
Type family equations violate injectivity annotation:
- IClosed Int Char Bool = Bool
- IClosed Int Int Int = Bool
+ IClosed Int Char Bool = Bool -- Defined at T6018failclosed.hs:43:5
+ IClosed Int Int Int = Bool -- Defined at T6018failclosed.hs:44:5
In the equations for closed type family ‘IClosed’
In the type family declaration for ‘IClosed’
@@ -65,14 +67,14 @@ T6018failclosed.hs:50:3: error:
Type family equation violates injectivity annotation.
Type variable ‘a’ cannot be inferred from the right-hand side.
In the type family equation:
- E2 a = 'False
+ E2 a = 'False -- Defined at T6018failclosed.hs:50:3
In the equations for closed type family ‘E2’
In the type family declaration for ‘E2’
T6018failclosed.hs:61:3: error:
Type family equations violate injectivity annotation:
- F a IO = IO a
- F Char b = b Int
+ F a IO = IO a -- Defined at T6018failclosed.hs:61:3
+ F Char b = b Int -- Defined at T6018failclosed.hs:62:3
In the equations for closed type family ‘F’
In the type family declaration for ‘F’
@@ -81,6 +83,7 @@ T6018failclosed.hs:66:5: error:
Kind variable ‘k’ cannot be inferred from the right-hand side.
(enabling -fprint-explicit-kinds might help)
In the type family equation:
- forall (k :: BOX) (a :: k) (b :: k). Gc a b = Int
+ forall (k :: BOX) (a :: k) (b :: k).
+ Gc a b = Int -- Defined at T6018failclosed.hs:66:5
In the equations for closed type family ‘Gc’
In the type family declaration for ‘Gc’