Today I uploaded a small library for comparing Haskell values using a textual diff. This has served me well when diagnosing failing tests, or comparing a function with a proposed replacement.
Let's try it on some disassembled x86 code:
$ ghci λ> :m + Hdis86 Debug.Diff Data.ByteString λ> let f = disassemble amd64 . pack λ> diff (f [0x31,0xff,0x41,0x5e,0x48,0x89,0xc7]) (f [0x31,0xff,0x41,0x5c,0x48,0x89,0xc7]) --- /tmp/ddiff_x15061 2011-09-13 22:52:13.911842969 -0400 +++ /tmp/ddiff_y15061 2011-09-13 22:52:13.911842969 -0400 @@ -1,3 +1,3 @@ [Inst  Ixor [Reg (Reg32 RDI), Reg (Reg32 RDI)], - Inst [Rex] Ipop [Reg (Reg64 R14)], + Inst [Rex] Ipop [Reg (Reg64 R12)], Inst [Rex] Imov [Reg (Reg64 RDI), Reg (Reg64 RAX)]]
Sadly, a textual diff does not always produce usable results. I'm also interested in generic diffs for algebraic data types. There are some packages for this (1, 2) but I haven't yet learned how to use them. This could also be a good application for the new generics support in GHC 7.2.