
#7862: Could not deduce (A) from the context (A, ...) ----------------------------------------+----------------------------------- Reporter: alang9 | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler (Type checker) | Version: 7.6.2 Keywords: | Os: Linux Architecture: x86_64 (amd64) | Failure: GHC rejects valid program Difficulty: Unknown | Testcase: Blockedby: | Blocking: Related: | ----------------------------------------+----------------------------------- Changes (by simonpj): * difficulty: => Unknown Comment: The error is indeed strange. With a minor variant I got {{{ T7862.hs:18:29: Overlapping instances for Num (Tower s0 (Scalar (Tower s (Scalar (Tower s a))))) }}} Whoa! Look at that alternation of `Tower` and `Scalar`! Nothing like that shows up in the program. Turned out that it was to do with flattening type-function applications. After all, taking the strange constraint above, we see: {{{ Num (Tower s0 (Scalar (Tower s (Scalar (Tower s a))))) = Num (Tower s0 (Scalar (Tower s a))) = Num (Tower s0 a) }}} by using the `type instance` twice... and ''that'' is a much more sensible constraint. Turned out that the constraint solver was mis-orienting an equality so that, in effect, it reported a much less perspicuous (albeit still equivalent) version of constraint. -- Ticket URL: http://hackage.haskell.org/trac/ghc/ticket/7862#comment:2 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler