[GHC] #10547: feature request: expanding type synonyms in error messages

#10547: feature request: expanding type synonyms in error messages -------------------------------------+------------------------------------- Reporter: osa1 | Owner: osa1 Type: feature | Status: new request | Milestone: 7.12.1 Priority: low | Version: Component: Compiler | Operating System: Unknown/Multiple (Type checker) | Type of failure: None/Unknown Keywords: | Blocked By: Architecture: | Related Tickets: Unknown/Multiple | Test Case: | Blocking: | Differential Revisions: | -------------------------------------+------------------------------------- Type errors sometimes becoming confusing because of synonyms, for example, expected type and found type sometimes use different synonyms or sometimes only one of them use a synonym etc. We discussed this in the mailing list: https://mail.haskell.org/pipermail /ghc-devs/2015-June/009247.html And also moved it to the Wiki to collect examples: https://wiki.haskell.org/Expanding_type_synonyms_in_error_messages_proposal I'm currently working on a patch, I made some progress and I'll hopefully submit something for reviews in a couple of days. This ticket is for further discussions and keep track of the progress. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10547 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#10547: feature request: expanding type synonyms in error messages -------------------------------------+------------------------------------- Reporter: osa1 | Owner: osa1 Type: feature request | Status: new Priority: low | Milestone: 7.12.1 Component: Compiler (Type | Version: checker) | Keywords: Resolution: | Architecture: Operating System: Unknown/Multiple | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: D1016 -------------------------------------+------------------------------------- Changes (by osa1): * differential: => D1016 -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10547#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#10547: feature request: expanding type synonyms in error messages -------------------------------------+------------------------------------- Reporter: osa1 | Owner: osa1 Type: feature request | Status: new Priority: low | Milestone: 7.12.1 Component: Compiler (Type | Version: checker) | Keywords: Resolution: | Architecture: Operating System: Unknown/Multiple | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: D1016 -------------------------------------+------------------------------------- Comment (by simonpj): Thanks for doing this, but I think we can do better without too much difficulty. The trouble here is that * You will often display types that are identical to the ones originally reported {{{ Couldn't match type ‘Int’ with ‘Bool’ Expected type: Int Actual type: Bool Type synonyms expanded: Expected type: Int Actual type: Bool }}} That would not be helpful! * You will expand synonyms that make it more, not less obscure: {{{ Couldn't match type ‘Int’ with ‘Bool’ Expected type: T Int Actual type: T Bool Type synonyms expanded: Expected type: big -> blab -> wibble -> Int -> wottle Actual type: big -> blab -> wibble -> Bool -> wottle }}} So, what you really want to do is to walk down the two types together, expanding synonyms in the one to make it match the other, and vice versa, until you get to the actual error. A function like {{{ expandSynonymsToMatch :: Type -> Type -> (Type, Type) }}} I suppose you could return a `Maybe` to say if any expansion at all happened; or you can do a type-equality test afterwards which is perhaps easier. Make sense? Simon -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10547#comment:2 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#10547: feature request: expanding type synonyms in error messages -------------------------------------+------------------------------------- Reporter: osa1 | Owner: osa1 Type: feature request | Status: new Priority: low | Milestone: 7.12.1 Component: Compiler (Type | Version: checker) | Keywords: Resolution: | Architecture: Operating System: Unknown/Multiple | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: D1016 -------------------------------------+------------------------------------- Comment (by osa1): So let's say I have these synonyms: {{{ T5 = T4 T4 = T3 ... T0 = Int }}} and these types: {{{ (T5, T3, X) and (T3, T5, Y) }}} ideally I want to report as "Expected (T3, T3, X) Found (T3, T3, Y)", did I get this right? So it's not just walking down two types together, because that would give us `(Int, Int, X)` and `(Int, Int, Y)`. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10547#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#10547: feature request: expanding type synonyms in error messages -------------------------------------+------------------------------------- Reporter: osa1 | Owner: osa1 Type: feature request | Status: new Priority: low | Milestone: 7.12.1 Component: Compiler (Type | Version: checker) | Keywords: Resolution: | Architecture: Operating System: Unknown/Multiple | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: D1016 -------------------------------------+------------------------------------- Comment (by simonpj): Ha ha. Yes, ideally so. But in practice I suspect it'll be infeasible to find the maximally-unexpanded version; as your example shows. I'd settle for: * If the head of the application matches (i.e. `T t1` vs `T t2`) then walk down `t1`,`t2`. * Otherwise expand both sides to a non-synonym type constructor. There is room for cleverness here. But a function with the above signature (for `expandSynonymsToMatch`) will serve the purpose, and we could start with a fairly simple one as above. Or do something cleverer if you like. Simon -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10547#comment:4 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#10547: feature request: expanding type synonyms in error messages -------------------------------------+------------------------------------- Reporter: osa1 | Owner: osa1 Type: feature request | Status: new Priority: low | Milestone: 7.12.1 Component: Compiler (Type | Version: checker) | Keywords: Resolution: | Architecture: Operating System: Unknown/Multiple | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: D1016 -------------------------------------+------------------------------------- Comment (by osa1): Simon, how does this look: I have this program: {{{ module Main where type T5 = T4 type T4 = T3 type T3 = T2 type T2 = T1 type T1 = Int type T a = Int -> Bool -> a -> String f :: T (T3, T5, Int) -> Int f = undefined a :: Int a = f (undefined :: T (T5, T3, Bool)) main = print a }}} and this is the error message: {{{ ➜ t10547 ghc-stage1 Main.hs -fprint-expanded-synonyms [1 of 1] Compiling Main ( Main.hs, Main.o ) Main.hs:15:8: error: Couldn't match type ‘Int’ with ‘Bool’ Expected type: T (T3, T5, Int) Actual type: T (T5, T3, Bool) Type synonyms expanded: Expected type: T (T3, T3, Int) Actual type: T (T3, T3, Bool) In the first argument of ‘f’, namely ‘(undefined :: T (T5, T3, Bool))’ In the expression: f (undefined :: T (T5, T3, Bool)) In an equation for ‘a’: a = f (undefined :: T (T5, T3, Bool)) }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10547#comment:5 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#10547: feature request: expanding type synonyms in error messages -------------------------------------+------------------------------------- Reporter: osa1 | Owner: osa1 Type: feature request | Status: new Priority: low | Milestone: 7.12.1 Component: Compiler (Type | Version: checker) | Keywords: Resolution: | Architecture: Operating System: Unknown/Multiple | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: D1016 -------------------------------------+------------------------------------- Comment (by simonpj): Looks good! Did you take the approach I sketched? -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10547#comment:6 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#10547: feature request: expanding type synonyms in error messages -------------------------------------+------------------------------------- Reporter: osa1 | Owner: osa1 Type: feature request | Status: new Priority: low | Milestone: 7.12.1 Component: Compiler (Type | Version: checker) | Keywords: Resolution: | Architecture: Operating System: Unknown/Multiple | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: D1016 -------------------------------------+------------------------------------- Comment (by osa1): I did something a little more fancy and inefficient :) I updated my patch: https://phabricator.haskell.org/D1016 -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10547#comment:7 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#10547: feature request: expanding type synonyms in error messages
-------------------------------------+-------------------------------------
Reporter: osa1 | Owner: osa1
Type: feature request | Status: new
Priority: low | Milestone: 7.12.1
Component: Compiler (Type | Version:
checker) | Keywords:
Resolution: | Architecture:
Operating System: Unknown/Multiple | Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Revisions: D1016
-------------------------------------+-------------------------------------
Comment (by Ben Gamari

#10547: feature request: expanding type synonyms in error messages -------------------------------------+------------------------------------- Reporter: osa1 | Owner: osa1 Type: feature request | Status: closed Priority: low | Milestone: 7.12.1 Component: Compiler (Type | Version: checker) | Resolution: fixed | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: Phab:D1016 -------------------------------------+------------------------------------- Changes (by thomie): * status: new => closed * differential: D1016 => Phab:D1016 * resolution: => fixed -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10547#comment:9 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#10547: feature request: expanding type synonyms in error messages -------------------------------------+------------------------------------- Reporter: osa1 | Owner: osa1 Type: feature request | Status: closed Priority: low | Milestone: 7.12.1 Component: Compiler (Type | Version: checker) | Resolution: fixed | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: | typecheck/should_fail/ExpandSynsFail1,2,3,4 Blocked By: | Blocking: Related Tickets: | Differential Revisions: Phab:D1016 -------------------------------------+------------------------------------- Changes (by thomie): * testcase: => typecheck/should_fail/ExpandSynsFail1,2,3,4 -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10547#comment:10 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#10547: feature request: expanding type synonyms in error messages -------------------------------------+------------------------------------- Reporter: osa1 | Owner: Type: feature request | Status: new Priority: low | Milestone: 8.0.1 Component: Compiler (Type | Version: checker) | Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: | typecheck/should_fail/ExpandSynsFail1,2,3,4 Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D1016 Wiki Page: | -------------------------------------+------------------------------------- Changes (by ezyang): * status: closed => new * owner: osa1 => * resolution: fixed => Comment: I think we should improve this a bit more. For one, this is not on by default, right? Any reason it shouldn't be? And if it's not on by default, GHC should at least mention that you can pass `-fprint-expanded-synonyms` to see the expansion of the type synonyms. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10547#comment:12 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#10547: feature request: expanding type synonyms in error messages -------------------------------------+------------------------------------- Reporter: osa1 | Owner: Type: feature request | Status: new Priority: low | Milestone: 8.0.1 Component: Compiler (Type | Version: checker) | Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: | typecheck/should_fail/ExpandSynsFail1,2,3,4 Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D1016 Wiki Page: | -------------------------------------+------------------------------------- Changes (by sjcjoosten): * Attachment "TestTypeSynonyms.hs" added. Test file in which it takes really long to expand type synonyms (in ghc-8.0.1-rc4) -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10547 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#10547: feature request: expanding type synonyms in error messages -------------------------------------+------------------------------------- Reporter: osa1 | Owner: Type: feature request | Status: new Priority: low | Milestone: 8.0.1 Component: Compiler (Type | Version: checker) | Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: | typecheck/should_fail/ExpandSynsFail1,2,3,4 Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D1016 Wiki Page: | -------------------------------------+------------------------------------- Comment (by sjcjoosten): Attached script is a reason to not have it on by default. The example code takes long enough to notice a delay but still see a result; changing the T12 and S12 into something like T15 S15 makes it take 'forever'. I don't know if this will occur in practice – it's hard to measure since all of hackage seems to type-check, but it's a reason to keep the switch off by default (as it is in rc-4). -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10547#comment:13 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#10547: feature request: expanding type synonyms in error messages -------------------------------------+------------------------------------- Reporter: osa1 | Owner: Type: feature request | Status: new Priority: low | Milestone: 8.0.1 Component: Compiler (Type | Version: checker) | Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: | typecheck/should_fail/ExpandSynsFail1,2,3,4 Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D1016 Wiki Page: | -------------------------------------+------------------------------------- Comment (by ezyang): Thanks for the nice example. osa1, can you tell why it is slow in this case? Would it be easy to fix? If testing if there is an interesting expansion is slow, then it won't be possible to mention `-fprint-expanded-synonyms` since we won't be able to tell if there is an expansion or not (we could mention it unconditionally but that feels like bad UX.) -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10547#comment:14 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#10547: feature request: expanding type synonyms in error messages -------------------------------------+------------------------------------- Reporter: osa1 | Owner: Type: feature request | Status: new Priority: low | Milestone: 8.0.1 Component: Compiler (Type | Version: checker) | Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: | typecheck/should_fail/ExpandSynsFail1,2,3,4 Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D1016 Wiki Page: | -------------------------------------+------------------------------------- Comment (by osa1): I found the problem and I'm current working on a fix... -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10547#comment:15 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#10547: feature request: expanding type synonyms in error messages -------------------------------------+------------------------------------- Reporter: osa1 | Owner: Type: feature request | Status: new Priority: low | Milestone: 8.0.1 Component: Compiler (Type | Version: checker) | Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: | typecheck/should_fail/ExpandSynsFail1,2,3,4 Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D1016, Wiki Page: | Phab:D2198 -------------------------------------+------------------------------------- Changes (by osa1): * differential: Phab:D1016 => Phab:D1016, Phab:D2198 -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10547#comment:16 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#10547: feature request: expanding type synonyms in error messages -------------------------------------+------------------------------------- Reporter: osa1 | Owner: Type: feature request | Status: new Priority: low | Milestone: 8.0.1 Component: Compiler (Type | Version: checker) | Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: | typecheck/should_fail/ExpandSynsFail1,2,3,4 Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D1016, Wiki Page: | Phab:D2198 -------------------------------------+------------------------------------- Comment (by osa1): OK, this should be fixed now. I'm currently validating the patch locally. As for why not enable this by default: The algorithm is looking through all expansions, so if the first type can be expanded `n` and second type `m` times, it takes `O(n * m)` steps to find a version of the error message that has minimum amount of expansions. When fixing this bug I realized that type synonym expansion is probably fast enough, and in practice `n` and `m` will not be too big, so maybe it's OK to enable this by default. We should probably just generate some pathological cases and look at compile times with and without `-fprint-expanded-synonyms`. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10547#comment:17 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#10547: feature request: expanding type synonyms in error messages -------------------------------------+------------------------------------- Reporter: osa1 | Owner: Type: feature request | Status: new Priority: low | Milestone: 8.0.1 Component: Compiler (Type | Version: checker) | Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: | typecheck/should_fail/ExpandSynsFail1,2,3,4 Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D1016, Wiki Page: | Phab:D2198 -------------------------------------+------------------------------------- Comment (by ezyang): Under Simon's algorithm, I don't see why you should have an `O(n * m)` asymptotic behavior. I guess you are trying to handle this case? {{{ type T = Int type S = T type S1 = S type S2 = S -- error message comparing S1 and S2 -- AKA S and S (not Int and Int) }}} Then the problem resolves to this: given two (singly) linked lists which share a common tail, determine the head of the tail. This is a popular coding interview question and you can do better than `O(n * m)`; e.g. by method 3 here http://www.geeksforgeeks.org/write-a-function-to-get-the- intersection-point-of-two-linked-lists/ -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10547#comment:18 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#10547: feature request: expanding type synonyms in error messages -------------------------------------+------------------------------------- Reporter: osa1 | Owner: Type: feature request | Status: new Priority: low | Milestone: 8.0.1 Component: Compiler (Type | Version: checker) | Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: | typecheck/should_fail/ExpandSynsFail1,2,3,4 Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D1016, Wiki Page: | Phab:D2198 -------------------------------------+------------------------------------- Comment (by osa1): Yes, I wanted to handle that case (see also test `ExpandSynsFail3.hs`). My original implementation was method (1) in that web page. I just implemented method (3) and updated the patch. The problematic example was taking no time at all even with method (1), I guess it's now even faster. Since we have a linear behavior now maybe we can enable it by default. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10547#comment:19 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#10547: feature request: expanding type synonyms in error messages -------------------------------------+------------------------------------- Reporter: osa1 | Owner: Type: feature request | Status: new Priority: low | Milestone: 8.0.1 Component: Compiler (Type | Version: checker) | Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: | typecheck/should_fail/ExpandSynsFail1,2,3,4 Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D1016, Wiki Page: | Phab:D2198 -------------------------------------+------------------------------------- Comment (by osa1): Just as a test I added `-fprint-expanded-synonyms` to every `should_fail` test in `typechecker/`. Here's the diff: {{{ --- ./tcfail016.stderr.normalised 2016-05-12 08:00:33.702460710 -0400 +++ ./tcfail016.comp.stderr.normalised 2016-05-12 08:00:33.702460710 -0400 @@ -3,5 +3,8 @@ Couldn't match type ‘(t, Expr t)’ with ‘Expr t’ Expected type: AnnExpr t -> [[Char]] Actual type: Expr t -> [[Char]] + Type synonyms expanded: + Expected type: (t, Expr t) -> [[Char]] + Actual type: Expr t -> [[Char]] Relevant bindings include g :: AnnExpr t -> [[Char]] (bound at tcfail016.hs:8:1) --- ./tcfail068.stderr.normalised 2016-05-12 08:00:38.994460634 -0400 +++ ./tcfail068.comp.stderr.normalised 2016-05-12 08:00:38.994460634 -0400 @@ -13,6 +13,9 @@ at tcfail068.hs:11:10 Expected type: GHC.ST.ST s1 (IndTree s a) Actual type: GHC.ST.ST s1 (STArray s1 (Int, Int) a) + Type synonyms expanded: + Expected type: GHC.ST.ST s1 (STArray s (Int, Int) a) + Actual type: GHC.ST.ST s1 (STArray s1 (Int, Int) a) In the first argument of ‘runST’, namely ‘(newSTArray ((1, 1), n) x)’ In the expression: runST (newSTArray ((1, 1), n) x) --- ./T9774.stderr.normalised 2016-05-12 08:01:14.797460115 -0400 +++ ./T9774.comp.stderr.normalised 2016-05-12 08:01:14.797460115 -0400 @@ -3,6 +3,9 @@ Couldn't match type ‘Char’ with ‘[Char]’ Expected type: String Actual type: Char + Type synonyms expanded: + Expected type: [Char] + Actual type: Char In the first argument of ‘putStrLn’, namely ‘(assert True 'a')’ In the expression: putStrLn (assert True 'a') In an equation for ‘foo’: foo = putStrLn (assert True 'a') }}} I think we can enable this by default as it's both stable and fast now. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10547#comment:20 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#10547: feature request: expanding type synonyms in error messages
-------------------------------------+-------------------------------------
Reporter: osa1 | Owner:
Type: feature request | Status: new
Priority: low | Milestone: 8.0.1
Component: Compiler (Type | Version:
checker) |
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
| typecheck/should_fail/ExpandSynsFail1,2,3,4
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s): Phab:D1016,
Wiki Page: | Phab:D2198
-------------------------------------+-------------------------------------
Comment (by Ömer Sinan Ağacan

#10547: feature request: expanding type synonyms in error messages -------------------------------------+------------------------------------- Reporter: osa1 | Owner: Type: feature request | Status: merge Priority: low | Milestone: 8.0.2 Component: Compiler (Type | Version: checker) | Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: | typecheck/should_fail/ExpandSynsFail1,2,3,4 Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D1016, Wiki Page: | Phab:D2198 -------------------------------------+------------------------------------- Changes (by osa1): * status: new => merge -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10547#comment:23 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#10547: feature request: expanding type synonyms in error messages -------------------------------------+------------------------------------- Reporter: osa1 | Owner: Type: feature request | Status: closed Priority: low | Milestone: 8.0.2 Component: Compiler (Type | Version: checker) | Resolution: fixed | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: | typecheck/should_fail/ExpandSynsFail1,2,3,4 Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D1016, Wiki Page: | Phab:D2198 -------------------------------------+------------------------------------- Changes (by bgamari): * status: merge => closed * resolution: => fixed Comment: Merged to `ghc-8.0` as 5c6e25f4cee5f53d4a6f4f20e6da63a65b4a1c17. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10547#comment:24 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler
participants (1)
-
GHC