[GHC] #8422: type nats solver is too weak!

GHC ghc-devs
Tue Oct 8 21:07:13 UTC 2013


#8422: type nats solver is too weak!
----------------------------------------------+----------------------------
        Reporter:  carter                     |            Owner:
            Type:  bug                        |           Status:  new
        Priority:  highest                    |        Milestone:  7.8.1
       Component:  Compiler (Type checker)    |          Version:  7.7
      Resolution:                             |         Keywords:
Operating System:  Unknown/Multiple           |     Architecture:
 Type of failure:  GHC rejects valid program  |  Unknown/Multiple
       Test Case:                             |       Difficulty:  Unknown
        Blocking:                             |       Blocked By:
                                              |  Related Tickets:
----------------------------------------------+----------------------------

Comment (by carter):

 the error in question  is

 {{{

 Fancy.hs:58:35:
     Could not deduce ((r2 + (1 + b)) ~ (a + b))
     from the context (r ~ (1 + r1))
       bound by a pattern with constructor
                  :* :: forall (r :: Nat). Int -> Shape r -> Shape (1 + r),
                in an equation for ?reverseShape?
       at Fancy.hs:54:19-30
     or from (a ~ (1 + r2))
       bound by a pattern with constructor
                  :* :: forall (r :: Nat). Int -> Shape r -> Shape (1 + r),
                in an equation for ?go?
       at Fancy.hs:58:13-22
     NB: ?+? is a type function, and may not be injective
     Expected type: Shape (a + b)
       Actual type: Shape (r2 + (1 + b))
     Relevant bindings include
       res :: Shape b (bound at Fancy.hs:58:27)
       more :: Shape r2 (bound at Fancy.hs:58:19)
       go :: Shape a -> Shape b -> Shape (a + b) (bound at Fancy.hs:57:9)
     In the expression: go more (ix :* res)
     In an equation for ?go?: go (ix :* more) res = go more (ix :* res)

 }}}

 in one case , the solver should be able to deduce that 0+b = b ===>  b = r
 and in the other case that  a = a_1+1 then (a+b =r ) implies  a_1 + b +1=r

 or something like that

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8422#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler



More information about the ghc-tickets mailing list