Copyright | (c) Sterling Clover 2008-2011 Kevin Charter 2011 |
---|---|
License | BSD 3 Clause |
Maintainer | s.clover@gmail.com |
Stability | experimental |
Portability | portable |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
This is an implementation of the diff algorithm as described in An \( O(ND) \) Difference Algorithm and Its Variations (1986) http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.6927. For inputs of size \( O(N) \) with the number of differences \( D \) it has \( O(ND) \) time and \( O(D^2) \) space complexity.
Synopsis
Documentation
A value is either from the First
list, the Second
or from Both
.
Both
contains both the left and right values, in case you are using a form
of equality that doesn't check all data (for example, if you are using a
newtype to only perform equality on side of a tuple).
Comparing lists for differences
getDiff :: Eq a => [a] -> [a] -> [Diff a] Source #
Takes two lists and returns a list of differences between them. This is
getDiffBy
with ==
used as predicate.
> getDiff ["a","b","c","d","e"] ["a","c","d","f"] [Both "a" "a",First "b",Both "c" "c",Both "d" "d",First "e",Second "f"] > getDiff "abcde" "acdf" [Both 'a' 'a',First 'b',Both 'c' 'c',Both 'd' 'd',First 'e',Second 'f']
Finding chunks of differences
getGroupedDiff :: Eq a => [a] -> [a] -> [Diff [a]] Source #
Takes two lists and returns a list of differences between them, grouped
into chunks. This is getGroupedDiffBy
with ==
used as predicate.
> getGroupedDiff "abcde" "acdf" [Both "a" "a",First "b",Both "cd" "cd",First "e",Second "f"]
getGroupedDiffBy :: (a -> b -> Bool) -> [a] -> [b] -> [PolyDiff [a] [b]] Source #