diff in Haskell?

George Russell ger@tzi.de
Thu, 21 Nov 2002 17:37:38 +0100


Does anyone happen to have implemented diff in Haskell?  Something like

diff :: Ord a -> [a] -> [a] -> [DiffElement a]

data DiffElement a =
      InBoth a
   |  InFirst a
   |  InSecond a

So for example 
   diff [1,2,3,4,5] [2,3,6,7,4] might return
      [InFirst 1,InBoth 2,InBoth 3,InSecond 6,InSecond 7,InBoth 4,InFirst 5]

It would try to make the output list as short as possible, while still maintaining that the
subsequence of InFirst and InBoth a's is the same as its first argument, while the subsequence
of InSecond and Both a's is the same as its second argument.  However it doesn't have to return
the shortest possible output list; it may be that it can compute one which is close to optimal
much faster.  Also if you'd rather have a hash function than Ord I can manage that.

Thanks if anyone can help, and save me a bit of work ...

George Russell