As you can see, I'm trying to implement a reverse function for my vectors which guarantees that the output vector is the same size as the input one. I tried to express this constraint at the type level.
The problem is that I can't have ghc to type check the reverse function in the non-trivial case:
_________________
Could not deduce (Plus n1 (S m) ~ S (Plus n1 m))
from the context (n ~ S n1)
bound by a pattern with constructor
CV :: forall n. Int -> Vect n -> Vect (S n),
in an equation for ‘vecReverse’
at vect3.hs:30:13-18
Expected type: Vect (Plus n m)
Actual type: Vect (Plus n1 (S m))
_________________