Setup more error context for Backpack operations.
authorEdward Z. Yang <ezyang@cs.stanford.edu>
Tue, 7 Feb 2017 23:02:40 +0000 (15:02 -0800)
committerEdward Z. Yang <ezyang@cs.stanford.edu>
Mon, 13 Feb 2017 03:14:52 +0000 (19:14 -0800)
Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: bgamari, simonpj, austin

Subscribers: thomie

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

29 files changed:
compiler/main/ErrUtils.hs
compiler/typecheck/TcBackpack.hs
compiler/utils/Outputable.hs
testsuite/tests/backpack/cabal/bkpcabal02/bkpcabal02.stderr
testsuite/tests/backpack/should_fail/bkpfail01.stderr
testsuite/tests/backpack/should_fail/bkpfail03.stderr
testsuite/tests/backpack/should_fail/bkpfail04.stderr
testsuite/tests/backpack/should_fail/bkpfail05.stderr
testsuite/tests/backpack/should_fail/bkpfail06.stderr
testsuite/tests/backpack/should_fail/bkpfail10.stderr
testsuite/tests/backpack/should_fail/bkpfail11.stderr
testsuite/tests/backpack/should_fail/bkpfail16.stderr
testsuite/tests/backpack/should_fail/bkpfail17.stderr
testsuite/tests/backpack/should_fail/bkpfail19.stderr
testsuite/tests/backpack/should_fail/bkpfail20.stderr
testsuite/tests/backpack/should_fail/bkpfail21.stderr
testsuite/tests/backpack/should_fail/bkpfail22.stderr
testsuite/tests/backpack/should_fail/bkpfail23.stderr
testsuite/tests/backpack/should_fail/bkpfail25.stderr
testsuite/tests/backpack/should_fail/bkpfail26.stderr
testsuite/tests/backpack/should_fail/bkpfail27.stderr
testsuite/tests/backpack/should_fail/bkpfail29.stderr
testsuite/tests/backpack/should_fail/bkpfail32.stderr
testsuite/tests/backpack/should_fail/bkpfail33.stderr
testsuite/tests/backpack/should_fail/bkpfail35.stderr
testsuite/tests/backpack/should_fail/bkpfail37.stderr
testsuite/tests/backpack/should_fail/bkpfail38.stderr
testsuite/tests/backpack/should_fail/bkpfail42.stderr
testsuite/tests/backpack/should_fail/bkpfail43.stderr

index 94ea96e..d73628a 100644 (file)
@@ -364,7 +364,6 @@ formatErrDoc dflags (ErrDoc important context supplementary)
     msgs = filter (not . null) $ map (filter (not . Outputable.isEmpty dflags))
         [important, context, supplementary]
     starred = (bullet<+>) . vcat
-    bullet = text $ if DynFlags.useUnicode dflags then "•" else "*"
 
 pprErrMsgBagWithLoc :: Bag ErrMsg -> [SDoc]
 pprErrMsgBagWithLoc bag = [ pprLocErrMsg item | item <- sortMsgBag Nothing bag ]
index fef586f..72cd89b 100644 (file)
@@ -316,10 +316,7 @@ checkUnitId uid = do
             -- (because we FORCE things to be merged in), so don't check them
             when (not (isHoleModule mod)) $ do
                 checkUnitId (moduleUnitId mod)
-                _ <- addErrCtxt (text "while checking that" <+> ppr mod
-                        <+> text "implements signature" <+> ppr mod_name <+> text "in"
-                        <+> ppr uid) $
-                    mod `checkImplements` IndefModule indef mod_name
+                _ <- mod `checkImplements` IndefModule indef mod_name
                 return ()
       _ -> return () -- if it's hashed, must be well-typed
 
@@ -472,6 +469,15 @@ inheritedSigPvpWarning =
 -- logically "implicit" entities are defined indirectly in an interface
 -- file.  #13151 gives a proposal to make these *truly* implicit.
 
+merge_msg :: ModuleName -> [IndefModule] -> SDoc
+merge_msg mod_name [] =
+    text "while checking the local signature" <+> ppr mod_name <+>
+    text "for consistency"
+merge_msg mod_name reqs =
+  hang (text "while merging the signatures from" <> colon)
+   2 (vcat [ bullet <+> ppr req | req <- reqs ] $$
+      bullet <+> text "...and the local signature for" <+> ppr mod_name)
+
 -- | Given a local 'ModIface', merge all inherited requirements
 -- from 'requirementMerges' into this signature, producing
 -- a final 'TcGblEnv' that matches the local signature and
@@ -487,10 +493,13 @@ mergeSignatures hsmod lcl_iface0 = do
     let outer_mod = tcg_mod tcg_env
         inner_mod = tcg_semantic_mod tcg_env
         mb_exports = hsmodExports (unLoc (hpm_module hsmod))
+        mod_name = moduleName (tcg_mod tcg_env)
 
     -- STEP 1: Figure out all of the external signature interfaces
     -- we are going to merge in.
-    let reqs = requirementMerges dflags (moduleName (tcg_mod tcg_env))
+    let reqs = requirementMerges dflags mod_name
+
+    addErrCtxt (merge_msg mod_name reqs) $ do
 
     -- STEP 2: Read in the RAW forms of all of these interfaces
     ireq_ifaces0 <- forM reqs $ \(IndefModule iuid mod_name) ->
@@ -746,11 +755,18 @@ tcRnInstantiateSignature hsc_env this_mod real_loc =
 exportOccs :: [AvailInfo] -> [OccName]
 exportOccs = concatMap (map occName . availNames)
 
+impl_msg :: Module -> IndefModule -> SDoc
+impl_msg impl_mod (IndefModule req_uid req_mod_name) =
+  text "while checking that" <+> ppr impl_mod <+>
+  text "implements signature" <+> ppr req_mod_name <+>
+  text "in" <+> ppr req_uid
+
 -- | Check if module implements a signature.  (The signature is
 -- always un-hashed, which is why its components are specified
 -- explicitly.)
 checkImplements :: Module -> IndefModule -> TcRn TcGblEnv
-checkImplements impl_mod (IndefModule uid mod_name) = do
+checkImplements impl_mod req_mod@(IndefModule uid mod_name) =
+  addErrCtxt (impl_msg impl_mod req_mod) $ do
     let insts = indefUnitIdInsts uid
 
     -- STEP 1: Load the implementing interface, and make a RdrEnv
index 43979ff..d78411a 100644 (file)
@@ -29,7 +29,7 @@ module Outputable (
         semi, comma, colon, dcolon, space, equals, dot, vbar,
         arrow, larrow, darrow, arrowt, larrowt, arrowtt, larrowtt,
         lparen, rparen, lbrack, rbrack, lbrace, rbrace, underscore,
-        blankLine, forAllLit, kindStar,
+        blankLine, forAllLit, kindStar, bullet,
         (<>), (<+>), hcat, hsep,
         ($$), ($+$), vcat,
         sep, cat,
@@ -635,12 +635,21 @@ forAllLit = unicodeSyntax (char '∀') (text "forall")
 kindStar :: SDoc
 kindStar = unicodeSyntax (char '★') (char '*')
 
+bullet :: SDoc
+bullet = unicode (char '•') (char '*')
+
 unicodeSyntax :: SDoc -> SDoc -> SDoc
 unicodeSyntax unicode plain = sdocWithDynFlags $ \dflags ->
     if useUnicode dflags && useUnicodeSyntax dflags
     then unicode
     else plain
 
+unicode :: SDoc -> SDoc -> SDoc
+unicode unicode plain = sdocWithDynFlags $ \dflags ->
+    if useUnicode dflags
+    then unicode
+    else plain
+
 nest :: Int -> SDoc -> SDoc
 -- ^ Indent 'SDoc' some specified amount
 (<>) :: SDoc -> SDoc -> SDoc
index 0873656..c1aa54d 100644 (file)
@@ -1,7 +1,10 @@
 
 q/H.hsig:2:1: error:
-    Identifier ‘x’ has conflicting definitions in the module
-    and its hsig file
-    Main module: x :: ghc-prim-0.5.0.0:GHC.Types.Int
-    Hsig file:  x :: ghc-prim-0.5.0.0:GHC.Types.Bool
-    The two types are different
+    • Identifier ‘x’ has conflicting definitions in the module
+      and its hsig file
+      Main module: x :: ghc-prim-0.5.0.0:GHC.Types.Int
+      Hsig file:  x :: ghc-prim-0.5.0.0:GHC.Types.Bool
+      The two types are different
+    • while merging the signatures from:
+        • z-bkpcabal01-z-p-0.1.0.0[H=<H>]:H
+        • ...and the local signature for H
index ae27f19..3231922 100644 (file)
@@ -11,7 +11,9 @@
     [1 of 2] Compiling H[sig]           ( p/H.hsig, nothing )
 
 bkpfail01.out/p/p-D5Mg3foBSCrDbQDKH4WGSG/../H.hi:1:1: error:
-    ‘H’ is exported by the hsig file, but not exported the module ‘q:H’
+    • ‘H’ is exported by the hsig file, but not exported the module ‘q:H’
+    • while checking that q:H implements signature H in p[H=q:H]
 
 bkpfail01.out/p/p-D5Mg3foBSCrDbQDKH4WGSG/../H.hi:1:1: error:
-    ‘H’ is exported by the hsig file, but not exported the module ‘q:H’
+    • ‘H’ is exported by the hsig file, but not exported the module ‘q:H’
+    • while checking that q:H implements signature H in p[H=q:H]
index 0b66c2d..9383a2a 100644 (file)
@@ -12,5 +12,6 @@
     [2 of 2] Compiling M2[sig]          ( q/M2.hsig, nothing )
 
 bkpfail03.bkp:3:9: error:
-    The hsig file (re)exports ‘M1.M’
-    but the implementing module exports a different identifier ‘M2.M’
+    • The hsig file (re)exports ‘M1.M’
+      but the implementing module exports a different identifier ‘M2.M’
+    • while checking that m2:M2 implements signature M2 in q[M2=m2:M2]
index 48287cd..f445c57 100644 (file)
@@ -6,10 +6,14 @@
   [1 of 2] Compiling A[sig]           ( r/A.hsig, nothing )
 
 bkpfail04.bkp:7:9: error:
-    Type constructor ‘A’ has conflicting definitions in the module
-    and its hsig file
-    Main module: data A = A {foo :: GHC.Types.Int}
-    Hsig file:  data A = A {bar :: GHC.Types.Bool}
-    The constructors do not match:
-      The record label lists for ‘A’ differ
-      The types for ‘A’ differ
+    • Type constructor ‘A’ has conflicting definitions in the module
+      and its hsig file
+      Main module: data A = A {foo :: GHC.Types.Int}
+      Hsig file:  data A = A {bar :: GHC.Types.Bool}
+      The constructors do not match:
+        The record label lists for ‘A’ differ
+        The types for ‘A’ differ
+    • while merging the signatures from:
+        • p[A=<A>]:A
+        • q[A=<A>]:A
+        • ...and the local signature for A
index 25428e4..cb83305 100644 (file)
@@ -18,4 +18,5 @@
       [1 of 1] Compiling H[sig]           ( h/H.hsig, bkpfail05.out/h/h-5FYQgnNkfSvBT5yogOxPpf/H.o )
 
 bkpfail05.out/h/h-5FYQgnNkfSvBT5yogOxPpf/../H.hi:1:1: error:
-    ‘T1’ is exported by the hsig file, but not exported the module ‘h-impl:H’
+    • ‘T1’ is exported by the hsig file, but not exported the module ‘h-impl:H’
+    • while checking that h-impl:H implements signature H in h[H=h-impl:H]
index c050944..27e0ddf 100644 (file)
@@ -12,8 +12,9 @@
     [1 of 2] Compiling H[sig]           ( p/H.hsig, bkpfail06.out/p/p-IueY0RdHDM2I4k0mLZuqM0/H.o )
 
 bkpfail06.bkp:10:9: error:
-    Type constructor ‘T’ has conflicting definitions in the module
-    and its hsig file
-    Main module: data T = T GHC.Types.Bool
-    Hsig file:  data T = T GHC.Types.Int
-    The constructors do not match: The types for ‘T’ differ
+    • Type constructor ‘T’ has conflicting definitions in the module
+      and its hsig file
+      Main module: data T = T GHC.Types.Bool
+      Hsig file:  data T = T GHC.Types.Int
+      The constructors do not match: The types for ‘T’ differ
+    • while checking that qimpl:H implements signature H in p[H=qimpl:H]
index 27cbcdc..bb31da4 100644 (file)
     [1 of 1] Compiling H[sig]           ( p/H.hsig, bkpfail10.out/p/p-D5Mg3foBSCrDbQDKH4WGSG/H.o )
 
 bkpfail10.bkp:8:9: error:
-    Type constructor ‘H’ has conflicting definitions in the module
-    and its hsig file
-    Main module: data H a = H a
-    Hsig file:  skolem H
-    The types have different kinds
+    • Type constructor ‘H’ has conflicting definitions in the module
+      and its hsig file
+      Main module: data H a = H a
+      Hsig file:  skolem H
+      The types have different kinds
+    • while checking that q:H implements signature H in p[H=q:H]
 
 bkpfail10.bkp:10:9: error:
-    Identifier ‘f’ has conflicting definitions in the module
-    and its hsig file
-    Main module: f :: H a -> H a
-    Hsig file:  f :: H -> H
-    The two types are different
+    • Identifier ‘f’ has conflicting definitions in the module
+      and its hsig file
+      Main module: f :: H a -> H a
+      Hsig file:  f :: H -> H
+      The two types are different
+    • while checking that q:H implements signature H in p[H=q:H]
index c91d15f..52938c0 100644 (file)
@@ -11,7 +11,8 @@
     [1 of 2] Compiling A[sig]           ( sig/A.hsig, bkpfail11.out/sig/sig-HyoWTHt34SDIRGEX0vZ8iN/A.o )
 
 bkpfail11.out/sig/sig-HyoWTHt34SDIRGEX0vZ8iN/../A.hi:1:1: error:
-    No instance for (GHC.Show.Show X)
-      arising when attempting to show that
-      instance [safe] GHC.Show.Show T -- Defined at bkpfail11.bkp:5:18
-      is provided by ‘mod:A’
+    • No instance for (GHC.Show.Show X)
+        arising when attempting to show that
+        instance [safe] GHC.Show.Show T -- Defined at bkpfail11.bkp:5:18
+        is provided by ‘mod:A’
+    • while checking that mod:A implements signature A in sig[A=mod:A]
index 049cb38..3b38ea8 100644 (file)
@@ -7,4 +7,5 @@
     [1 of 1] Compiling ShouldFail[sig]  ( p/ShouldFail.hsig, bkpfail16.out/p/p-1OqLaT7dAn947wScQQKCw5/ShouldFail.o )
 
 bkpfail16.out/p/p-1OqLaT7dAn947wScQQKCw5/../ShouldFail.hi:1:1: error:
-    ‘Booly’ is exported by the hsig file, but not exported the module ‘Data.Bool’
+    • ‘Booly’ is exported by the hsig file, but not exported the module ‘Data.Bool’
+    • while checking that Data.Bool implements signature ShouldFail in p[ShouldFail=Data.Bool]
index 2b67e72..6d74b69 100644 (file)
@@ -7,9 +7,10 @@
     [1 of 1] Compiling ShouldFail[sig]  ( p/ShouldFail.hsig, bkpfail17.out/p/p-2W6J7O3LvroH97zGxbPEGF/ShouldFail.o )
 
 <no location info>: error:
-    Type constructor ‘Either’ has conflicting definitions in the module
-    and its hsig file
-    Main module: data Either a b = Left a | Right b
-    Hsig file:  type role Either representational phantom phantom
-                data Either a b c = Left a
-    The types have different kinds
+    • Type constructor ‘Either’ has conflicting definitions in the module
+      and its hsig file
+      Main module: data Either a b = Left a | Right b
+      Hsig file:  type role Either representational phantom phantom
+                  data Either a b c = Left a
+      The types have different kinds
+    • while checking that Prelude implements signature ShouldFail in p[ShouldFail=Prelude]
index 0f6cbfa..aaf5b8c 100644 (file)
@@ -7,5 +7,6 @@
     [1 of 1] Compiling ShouldFail[sig]  ( p/ShouldFail.hsig, bkpfail19.out/p/p-CfyUIAu1JTRCDuXEyGszXN/ShouldFail.o )
 
 <no location info>: error:
-    The hsig file (re)exports ‘Data.STRef.Lazy.newSTRef’
-    but the implementing module exports a different identifier ‘GHC.STRef.newSTRef’
+    • The hsig file (re)exports ‘Data.STRef.Lazy.newSTRef’
+      but the implementing module exports a different identifier ‘GHC.STRef.newSTRef’
+    • while checking that Data.STRef implements signature ShouldFail in p[ShouldFail=Data.STRef]
index df010b9..4e95695 100644 (file)
@@ -6,4 +6,8 @@
   [1 of 1] Compiling B[sig]           ( r/B.hsig, nothing )
 
 bkpfail20.bkp:1:1: error:
-    While merging export lists, could not unify Data.STRef.Lazy.newSTRef with GHC.STRef.newSTRef
+    • While merging export lists, could not unify Data.STRef.Lazy.newSTRef with GHC.STRef.newSTRef
+    • while merging the signatures from:
+        • p[A=<B>]:A
+        • q[A=<B>]:A
+        • ...and the local signature for B
index 258bf71..693135b 100644 (file)
@@ -10,5 +10,9 @@
   [3 of 3] Compiling H3[sig]          ( r/H3.hsig, nothing )
 
 bkpfail21.bkp:1:1: error:
-    While merging export lists, could not unify {H1.T} with {H2.T}
-    Neither name variable originates from the current signature.
+    • While merging export lists, could not unify {H1.T} with {H2.T}
+      Neither name variable originates from the current signature.
+    • while merging the signatures from:
+        • p[A=<H1>,C=<H3>]:C
+        • q[B=<H2>,C=<H3>]:C
+        • ...and the local signature for H3
index 66db5b6..fe066bd 100644 (file)
@@ -14,7 +14,8 @@
     [1 of 2] Compiling H2[sig]          ( q/H2.hsig, bkpfail22.out/q/q-FjwGsuDQ5qiKUCvnEATUA9/H2.o )
 
 bkpfail22.bkp:16:9: error:
-    Type constructor ‘S’ has conflicting definitions in the module
-    and its hsig file
-    Main module: type S = ()
-    Hsig file:  type S = GHC.Types.Bool
+    • Type constructor ‘S’ has conflicting definitions in the module
+      and its hsig file
+      Main module: type S = ()
+      Hsig file:  type S = GHC.Types.Bool
+    • while checking that badimpl:H2 implements signature H2 in q[H2=badimpl:H2]
index 6681e24..54dddc0 100644 (file)
     [1 of 2] Compiling H[sig]           ( p/H.hsig, bkpfail23.out/p/p-6KeuBvYi0jvLWqVbkSAZMq/H.o )
 
 bkpfail23.bkp:14:9: error:
-    Type constructor ‘F’ has conflicting definitions in the module
-    and its hsig file
-    Main module: type F a = ()
-    Hsig file:  type role F phantom
-                skolem F a
-    Illegal parameterized type synonym in implementation of abstract data.
-    (Try eta reducing your type synonym so that it is nullary.)
+    • Type constructor ‘F’ has conflicting definitions in the module
+      and its hsig file
+      Main module: type F a = ()
+      Hsig file:  type role F phantom
+                  skolem F a
+      Illegal parameterized type synonym in implementation of abstract data.
+      (Try eta reducing your type synonym so that it is nullary.)
+    • while checking that h:H implements signature H in p[H=h:H]
index 56b1c90..f01231d 100644 (file)
@@ -16,7 +16,8 @@ bkpfail25.bkp:7:18: warning: [-Wmissing-methods (in -Wdefault)]
     [1 of 2] Compiling H[sig]           ( p/H.hsig, bkpfail25.out/p/p-D5Mg3foBSCrDbQDKH4WGSG/H.o )
 
 bkpfail25.bkp:12:9: error:
-    Type constructor ‘T’ has conflicting definitions in the module
-    and its hsig file
-    Main module: type T a = a
-    Hsig file:  skolem T a
+    • Type constructor ‘T’ has conflicting definitions in the module
+      and its hsig file
+      Main module: type T a = a
+      Hsig file:  skolem T a
+    • while checking that q:H implements signature H in p[H=q:H]
index d3fd320..583629f 100644 (file)
     [1 of 2] Compiling H[sig]           ( p/H.hsig, bkpfail26.out/p/p-D5Mg3foBSCrDbQDKH4WGSG/H.o )
 
 bkpfail26.bkp:15:9: error:
-    Type constructor ‘T’ has conflicting definitions in the module
-    and its hsig file
-    Main module: type T a = [a]
-    Hsig file:  skolem T a
-    Illegal parameterized type synonym in implementation of abstract data.
-    (Try eta reducing your type synonym so that it is nullary.)
+    • Type constructor ‘T’ has conflicting definitions in the module
+      and its hsig file
+      Main module: type T a = [a]
+      Hsig file:  skolem T a
+      Illegal parameterized type synonym in implementation of abstract data.
+      (Try eta reducing your type synonym so that it is nullary.)
+    • while checking that q:H implements signature H in p[H=q:H]
index 784ddbd..5f33d04 100644 (file)
@@ -11,8 +11,9 @@
     [1 of 2] Compiling H[sig]           ( p/H.hsig, bkpfail27.out/p/p-D5Mg3foBSCrDbQDKH4WGSG/H.o )
 
 bkpfail27.bkp:15:9: error:
-    Type constructor ‘T’ has conflicting definitions in the module
-    and its hsig file
-    Main module: type T = F
-    Hsig file:  skolem T
-    Illegal type family application in implementation of abstract data.
+    • Type constructor ‘T’ has conflicting definitions in the module
+      and its hsig file
+      Main module: type T = F
+      Hsig file:  skolem T
+      Illegal type family application in implementation of abstract data.
+    • while checking that q:H implements signature H in p[H=q:H]
index 768365a..dde8978 100644 (file)
@@ -6,6 +6,10 @@
   [1 of 2] Compiling A[sig]           ( r/A.hsig, nothing )
 
 bkpfail29.bkp:8:9: error:
-    Cycle in type synonym declarations:
-      bkpfail29.bkp:8:9-18: S from external module
-      bkpfail29.bkp:7:9-14: T from external module
+    • Cycle in type synonym declarations:
+        bkpfail29.bkp:8:9-18: S from external module
+        bkpfail29.bkp:7:9-14: T from external module
+    • while merging the signatures from:
+        • p[A=<A>]:A
+        • q[A=<A>]:A
+        • ...and the local signature for A
index a33ea5b..592199c 100644 (file)
@@ -2,4 +2,5 @@
   [1 of 1] Compiling A[sig]           ( p/A.hsig, nothing )
 
 bkpfail32.bkp:2:18: error:
-    Not in scope: type constructor or class ‘T’
+    • Not in scope: type constructor or class ‘T’
+    • while checking the local signature A for consistency
index fd268ad..4da8897 100644 (file)
@@ -4,4 +4,7 @@
   [1 of 1] Compiling A[sig]           ( q/A.hsig, nothing )
 
 bkpfail33.bkp:5:18: error:
-    Not in scope: type constructor or class ‘T’
+    • Not in scope: type constructor or class ‘T’
+    • while merging the signatures from:
+        • p[A=<A>]:A
+        • ...and the local signature for A
index e371488..ceafe14 100644 (file)
@@ -17,4 +17,5 @@ bkpfail35.bkp:8:18: warning:
     [1 of 1] Compiling A[sig]           ( q/A.hsig, bkpfail35.out/q/q-E72T6bb4XRkIeTPWK2mCKa/A.o )
 
 bkpfail35.out/q/q-E72T6bb4XRkIeTPWK2mCKa/../A.hi:1:1: error:
-    ‘y’ is exported by the hsig file, but not exported the module ‘aimpl:A’
+    • ‘y’ is exported by the hsig file, but not exported the module ‘aimpl:A’
+    • while checking that aimpl:A implements signature A in q[A=aimpl:A]
index 4edcd6d..a10c05f 100644 (file)
@@ -10,7 +10,8 @@
     [1 of 1] Compiling A[sig]           ( p/A.hsig, bkpfail37.out/p/p-HVmFlcYSefiK5n1aDP1v7x/A.o )
 
 bkpfail37.bkp:9:9: error:
-    Identifier ‘op’ has conflicting fixities in the module
-    and its hsig file
-    Main module: infixr 4
-    Hsig file: infixr 6
+    • Identifier ‘op’ has conflicting fixities in the module
+      and its hsig file
+      Main module: infixr 4
+      Hsig file: infixr 6
+    • while checking that q:A implements signature A in p[A=q:A]
index 7a8888c..df4a1d0 100644 (file)
@@ -6,7 +6,11 @@
   [1 of 1] Compiling A[sig]           ( r/A.hsig, nothing )
 
 bkpfail38.bkp:8:9: error:
-    Identifier ‘op’ has conflicting fixities in the module
-    and its hsig file
-    Main module: infixr 4
-    Hsig file: infixr 6
+    • Identifier ‘op’ has conflicting fixities in the module
+      and its hsig file
+      Main module: infixr 4
+      Hsig file: infixr 6
+    • while merging the signatures from:
+        • p[A=<A>]:A
+        • q[A=<A>]:A
+        • ...and the local signature for A
index 734832f..30b43d8 100644 (file)
@@ -4,9 +4,12 @@
   [1 of 1] Compiling A[sig]           ( q/A.hsig, nothing )
 
 bkpfail42.bkp:9:9: error:
-    Type constructor ‘F’ has conflicting definitions in the module
-    and its hsig file
-    Main module: type family F a :: *
-                   where [a] F a = GHC.Types.Int
-    Hsig file:  type family F a :: *
-                  where [a] F a = GHC.Types.Bool
+    • Type constructor ‘F’ has conflicting definitions in the module
+      and its hsig file
+      Main module: type family F a :: *
+                     where [a] F a = GHC.Types.Int
+      Hsig file:  type family F a :: *
+                    where [a] F a = GHC.Types.Bool
+    • while merging the signatures from:
+        • p[A=<A>]:A
+        • ...and the local signature for A
index 91c010d..1ba1164 100644 (file)
     [1 of 2] Compiling A[sig]           ( p/A.hsig, bkpfail43.out/p/p-HVmFlcYSefiK5n1aDP1v7x/A.o )
 
 bkpfail43.out/p/p-HVmFlcYSefiK5n1aDP1v7x/../A.hi:1:1: error:
-    No instance for (GHC.Show.Show (a -> b))
-      arising when attempting to show that
-      instance [safe] GHC.Show.Show (a -> b)
-        -- Defined at bkpfail43.bkp:3:18
-      is provided by ‘q:A’
-      (maybe you haven't applied a function to enough arguments?)
+    • No instance for (GHC.Show.Show (a -> b))
+        arising when attempting to show that
+        instance [safe] GHC.Show.Show (a -> b)
+          -- Defined at bkpfail43.bkp:3:18
+        is provided by ‘q:A’
+        (maybe you haven't applied a function to enough arguments?)
+    • while checking that q:A implements signature A in p[A=q:A]