I've typechecked this by hand, and indeed it looks to me as if it should work.

(Admittedly, your inAssocL function is making an unsubstantiated claim (since 
you define it as 'undefined'), but that is still sound since any attempt to run 
the program will diverge.  But it should tpyecheck.)

Here is my calculation, for the Cons case of

|  > revcat :: List a m -> List a n -> List a (Plus m n)
|  > revcat Nil y = y
|  > revcat (Cons a x) y =
|  >    subst incAssocL (revcat x (Cons a y))

y :: List a n
x :: List a k,   where m ~ Suc k
Cons a y : List a Suc n
revcat x (Cons a y) :: List a (Plus k (Suc n))
subst inAssocL (revcat x (Cons a y)) :: List a (Plus (Suc k) n)

So to make the result type match up with the type of the RHS we need

m ~ Suc k
 =>
List a (Plus m n) ~ List a (Plus (Suc k) n)

which is of course the case.

Manuel has made some recent changes -- I have not seen if they fix this.

Simon


_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to