GPL-2.0-or-later licensed by Oleg Grenrus
Maintained by Oleg.Grenrus
This version can be pinned in stack with:tree-diff-,5475


Diffing of (expression) trees.


tree-diff displays pretty diffs of tree data:

Because of its untyped internal type, it copes with type changes:

As a bonus, multiline Strings and Text are diffed linewise:



  • Breaking change: Make HashSet and HashMap ToExpr instances sort the resulting lists of expressions. This makes the results deterministic. … but your golden files will need adjustment.

  • Add Ord Expr and Ord OMap instances

  • Depend on data-array-byte to provide more ByteArray instances


  • Add instances for base and primitive’s ByteArrays.

  • Support base-4.16 (GHC-9.2)


  • Support aeson-


  • Change the pretty printing to use less horizontal space. Pretty datastructure is changed.
  • Change Expr to use OMap; pretty-printing preserves field order.
  • Add strict and these instances
  • Add Eq and NFData (Edit a) instances.
  • Bump lower bounds


  • Support GHC-7.4 … 8.8 (use allow-newer for GHC-8.8-alpha).
  • Use raw GHC.Generics (drop generics-sop dependency)
  • Use own memoising (Vector lookup, drop MemoTrie dependency)
  • Singleton data-types (both data and newtypes) are printed in App form (i.e. no-record).
  • Change license to GPL-2.0-or-later

  • Support semigroups-0.19, hashable-1.3 and generics-sop-0.5


  • Print compact diffs
  • Add ToExpr instance for ShortByteString


  • Use BS.readFile and BS.writeFile in ediffGolden. This makes files read and written in UTF8 independently of locale. Fixes builds on appveyor.

  • Move to build-type: Simple


  • First version. Released on an unsuspecting world.