I try to write a function to check whether two vectors are equal or not:
Compare Vec1 [1, 2, 3] Vec1 [1, 2, 4]
Compare VecS ["a","b", "c"] VecS ["a", "b", "d"]
However, on my function I have "almost" identical implementation for both cases,
is there a way to simplify my code so that it has only one implementation for Integer and String
data MyVector = Vec1 [Integer] | VecS[String]
eqAssert::MyVector->MyVector->Bool
eqAssert (Vec1 []) (Vec1 []) = True
eqAssert (Vec1 _) (Vec1 []) = False
eqAssert (Vec1 (x:cx)) (Vec1 (y:cy)) =
if length (x:cx) /= length (y:cy)
then False
else (if x /= y then False else eqAssert (Vec1 cx) (Vec1 cy))
eqAssert (VecS []) (VecS []) = True
eqAssert (VecS _) (VecS []) = False
eqAssert (VecS (x:cx)) (VecS (y:cy)) =
if length (x:cx) /= length (y:cy)
then False
else (if x /= y then False else eqAssert (VecS cx) (VecS cy))