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