{-# LANGUAGE OverloadedStrings #-} import qualified Data.ByteString.Lazy as L import Data.VCDIFF import Text.XXD source :: L.ByteString source = "It could be said that Joe was here. I don't know what to do about it." patched :: L.ByteString patched = "It could be said that Joe, the magnificent, was here. I don't know what to do about it." delta :: Result VCDIFF delta = computeDiff defaultConfig source patched main = do mapM_ putStrLn $ xxd2 0 (L.toStrict source) putStrLn "" mapM_ putStrLn $ xxd2 0 (L.toStrict patched) putStrLn "" case delta of Result δ@(VCDIFF d) me -> do -- mapM_ (mapM_ putStrLn . xxd2 0) (chunksOf 16 d) mapM_ putStrLn $ xxd2 0 (L.toStrict d) print me putStrLn "" let Result patched' pe = applyPatch defaultConfig source δ mapM_ putStrLn $ xxd2 0 (L.toStrict patched') -- $ L.take 48 patched') print pe print ("source",source) print ("patched",patched)