diff --git a/Tests/test-filediff.hs b/Tests/test-filediff.hs
--- a/Tests/test-filediff.hs
+++ b/Tests/test-filediff.hs
@@ -37,6 +37,7 @@
 import Filediff.Sequence (SeqDiff(..))
 import qualified Filediff.Sequence as FSeq
 import qualified Filediff as F
+import qualified Filediff.Stats as F
 import qualified Filediff.Types as F
 
 -- helper functions
@@ -600,6 +601,23 @@
             actualDiff <- F.diffDirectories a b
             actualDiff @?= relativePathExpectedDiff
 
+testDiffStats :: Assertion
+testDiffStats = do
+    D.createDirectory "a"
+    D.createDirectory "b"
+
+    createFileWithContents "a/common" "x\na\nx"
+    createFileWithContents "b/common" "x\nb\nx"
+
+    createFileWithContents "a/afile" "a\na"
+    createFileWithContents "b/bfile" "b\nb\nb"
+
+    diff <- F.diffDirectories "a" "b"
+
+    F.numFilesAffected diff @?= 3
+    F.numAddedLines diff @?= 1 + 3
+    F.numDeletedLines diff @?= 1 + 2
+
 -- tests
 
 tests :: TestTree
@@ -716,6 +734,9 @@
     , testCase
         "Testing that paths are relative (edge cases)"
         (runTest testRelativePathnessEdgeCases)
+    , testCase
+        "Testing diff statistics"
+        (runTest testDiffStats)
     ]
 
 main :: IO ()
diff --git a/filediff.cabal b/filediff.cabal
--- a/filediff.cabal
+++ b/filediff.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                filediff
-version:             0.1.0.6
+version:             0.1.0.7
 synopsis:            Diffing and patching module
 description:         `filediff` is a Haskell library for creating diffs, and applying diffs to files and directories.
 homepage:            https://github.com/bgwines/filediff
@@ -20,7 +20,7 @@
     location: git://github.com/bgwines/filediff.git
 
 library
-  exposed-modules: Filediff, Filediff.Types, Filediff.Sequence
+  exposed-modules: Filediff, Filediff.Types, Filediff.Sequence, Filediff.Stats
   other-modules:   Filediff.Utils
   -- other-extensions:
   build-depends:       base >=4.7 && <4.8, mtl, time, directory, either, transformers, data-memocombinators, Zora >=1.1.22, text, data-default,  tasty, tasty-hunit
diff --git a/src/Filediff/Stats.hs b/src/Filediff/Stats.hs
new file mode 100644
--- /dev/null
+++ b/src/Filediff/Stats.hs
@@ -0,0 +1,33 @@
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE InstanceSigs #-}
+
+-- | Statistics on diffs
+module Filediff.Stats
+( -- * basic stats
+  numFilesAffected
+, numAddedLines
+, numDeletedLines
+) where
+
+import Filediff.Types
+import Filediff.Sequence
+
+-- | Number of files added, modified, or deleted in a diff.
+numFilesAffected :: Diff -> Int
+numFilesAffected = length . filediffs
+
+numMatchingLines :: (FileChange -> Bool) -> (SeqDiff Line -> [b]) -> Diff -> Int
+numMatchingLines isMatchingChange matchingLines
+    = sum
+    . map (length . matchingLines . seqDiff)
+    . filter isMatchingChange
+    . map change
+    . filediffs
+
+-- | Number of lines added in a diff.
+numAddedLines :: Diff -> Int
+numAddedLines = numMatchingLines (not . isDel) adds
+
+-- | Number of lines deleted in a diff.
+numDeletedLines :: Diff -> Int
+numDeletedLines = numMatchingLines (not . isAdd) dels
diff --git a/src/Filediff/Types.hs b/src/Filediff/Types.hs
--- a/src/Filediff/Types.hs
+++ b/src/Filediff/Types.hs
@@ -6,6 +6,10 @@
 ( Filediff(..)
 , Diff(..)
 , FileChange(..)
+, seqDiff
+, isDel
+, isMod
+, isAdd
 , Line
 , Error
 ) where
@@ -42,6 +46,28 @@
     = Del (SeqDiff Line)
     | Mod (SeqDiff Line)
     | Add (SeqDiff Line) deriving (Eq, Show, Generic)
+
+-- | Gets the 'SeqDiff' stored in a 'FileChange'.
+seqDiff :: FileChange -> SeqDiff Line
+seqDiff (Del diff) = diff
+seqDiff (Mod diff) = diff
+seqDiff (Add diff) = diff
+
+-- | Whether a 'FileChange' is a deletion or not.
+isDel :: FileChange -> Bool
+isDel (Del _) = True
+isDel (Mod _) = False
+isDel (Add _) = False
+-- | Whether a 'FileChange' is a modification or not.
+isMod :: FileChange -> Bool
+isMod (Del _) = False
+isMod (Mod _) = True
+isMod (Add _) = False
+-- | Whether a 'FileChange' is a addition or not.
+isAdd :: FileChange -> Bool
+isAdd (Del _) = False
+isAdd (Mod _) = False
+isAdd (Add _) = True
 
 instance Monoid FileChange where
     mempty :: FileChange
