Common diff algorithm works on list structures:
This package works on trees.
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.