import Diff
--test
main = do
let x = [1,2,3,4,5]
y = [1,0,3,6,5]
print $ diff x y
print $ diffIndex x y
module Diff
( diff
, diffIndex
) where
-- todo: generalize to all traversables/foldables
diff :: Eq a => [] a -> [] a -> [(a,a)]
diff [] _ = []
diff _ [] = []
diff (x:xs) (y:ys)
| not $ x == y = (x,y):(diffi)
| otherwise = diffi
where
diffi = diff xs ys
_diffIndex :: Eq a => Int -> [] a -> [] a -> [Int]
_diffIndex _ [] _ = []
_diffIndex _ _ [] = []
_diffIndex i (x:xs) (y:ys)
| not $ x == y = i:(diffI)
| otherwise = diffI
where
diffI = _diffIndex (i+1) xs ys
diffIndex :: Eq a => [] a -> [] a -> [Int]
diffIndex = _diffIndex 0