Description
Diffing of (expression) trees.
Description
Common diff algorithm works on list structures:
diff :: Eq a => [a] -> [a] -> [Edit a]
This package works on trees.
treeDiff :: Eq a => Tree a -> Tree a -> Edit (EditTree a)
This package also provides a way to diff arbitrary ADTs, using Generics
-derivable helpers.
This package differs from gdiff, in a two ways: tree-diff
doesn't have patch function, and the "edit-script" is a tree itself, which is useful for pretty-printing.
>>> prettyEditExpr $ ediff (Foo 42 [True, False] "old") (Foo 42 [False, False, True] "new")
Foo
{fooBool = [-True, +False, False, +True],
fooInt = 42,
fooString = -"old" +"new"}
README.md
tree-diff
Diffing of (expression) trees.
Examples
tree-diff
displays pretty diffs of tree data:
Because of its untyped internal type, it copes with type changes:
As a bonus, multiline String
s and Text
are diffed linewise: