dixi-0.6: Dixi/PatchUtils.hs
module Dixi.PatchUtils where
import Data.Foldable
import Data.Monoid
import Data.Patch (Patch)
import Data.Text (Text)
import Data.Vector (Vector)
import qualified Data.Patch as P
import qualified Data.Text as T
type PatchSummary = (Int, Int, Int)
patchSummary :: Patch a -> PatchSummary
patchSummary p | (Sum a, Sum b, Sum c) <- mconcat (map toCounts $ P.toList p) = (a,b,c)
where toCounts (P.Insert {}) = (Sum 1, Sum 0, Sum 0)
toCounts (P.Delete {}) = (Sum 0, Sum 1, Sum 0)
toCounts (P.Replace {}) = (Sum 0, Sum 0, Sum 1)
patchToText :: Patch Char -> Text
patchToText = T.pack . toList . patchToVector
patchToVector :: Patch Char -> Vector Char
patchToVector = flip P.apply mempty