diff --git a/changelog.md b/changelog.md
new file mode 100644
--- /dev/null
+++ b/changelog.md
@@ -0,0 +1,21 @@
+0.2.4
+
+* More Digit parsers.
+
+0.2.3
+
+* Digit parsers.
+
+0.2.2
+
+* Modulus operations.
+* `digits` function.
+* Fix tests.
+
+0.2.1
+
+* Include digit parsers.
+
+0.2.0
+
+* Update to use digit prisms.
diff --git a/digit.cabal b/digit.cabal
--- a/digit.cabal
+++ b/digit.cabal
@@ -1,5 +1,5 @@
 name:               digit
-version:            0.2.3
+version:            0.2.4
 license:            BSD3
 license-File:       etc/LICENCE
 author:             Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ>
@@ -11,7 +11,7 @@
 bug-reports:        https://github.com/NICTA/digit/issues
 cabal-version:      >= 1.10
 build-type:         Custom
-extra-source-files: etc/CONTRIBUTORS, etc/changelog
+extra-source-files: etc/CONTRIBUTORS, changelog.md
 description:
   <<http://i.imgur.com/Ns5hntl.jpg>>
   .
diff --git a/etc/changelog b/etc/changelog
deleted file mode 100644
--- a/etc/changelog
+++ /dev/null
@@ -1,17 +0,0 @@
-0.2.3
-
-* Digit parsers.
-
-0.2.2
-
-* Modulus operations.
-* `digits` function.
-* Fix tests.
-
-0.2.1
-
-* Include digit parsers.
-
-0.2.0
-
-* Update to use digit prisms.
diff --git a/src/Data/Digit.hs b/src/Data/Digit.hs
--- a/src/Data/Digit.hs
+++ b/src/Data/Digit.hs
@@ -41,6 +41,13 @@
 , parsedigit
 , parsedigits
 , parsedigits1
+, skipdigits
+, skipdigits1
+, parsenotdigit
+, parsenotdigits
+, parsenotdigits1
+, skipnotdigits
+, skipnotdigits1
 -- * Quasi-Quoters
 , digitQ
 ) where
@@ -56,15 +63,16 @@
 import Data.Function(const)
 import Data.Functor((<$), (<$>))
 import Data.Int(Int)
-import Data.List(unfoldr, reverse)
+import Data.List(unfoldr, reverse, notElem)
 import Data.Maybe(Maybe(Nothing, Just), maybe, fromMaybe)
 import Data.Ord(Ord((<)))
+import Data.String(String)
 import Data.Typeable (Typeable)
 import Language.Haskell.TH(ExpQ, PatQ, varE, varP, mkName)
 import Language.Haskell.TH.Quote(QuasiQuoter(QuasiQuoter), quotePat, quoteExp, quoteDec, dataToExpQ, dataToPatQ, quoteType)
 import Prelude(Show(..), Read(..), Enum(..), Bounded, Num(..), error, divMod, mod)
-import Text.Parser.Char(CharParsing, char)
-import Text.Parser.Combinators((<?>))
+import Text.Parser.Char(CharParsing, char, satisfy)
+import Text.Parser.Combinators(skipMany, skipSome, (<?>))
 
 -- $setup
 -- >>> import Prelude
@@ -577,6 +585,49 @@
   p [Digit]
 parsedigits1 =
   some parsedigit
+
+skipdigits ::
+  (Monad p, CharParsing p) =>
+  p ()
+skipdigits =
+  skipMany parsedigit
+
+skipdigits1 ::
+  (Monad p, CharParsing p) =>
+  p ()
+skipdigits1 =
+  skipSome parsedigit
+
+parsenotdigit ::
+  (Monad p, CharParsing p) =>
+  p Char
+parsenotdigit =
+  let p = satisfy (`notElem` ['0' .. '9'])
+  in p <?> "not digit"
+
+parsenotdigits ::
+  (Monad p, CharParsing p) =>
+  p String
+parsenotdigits =
+  many parsenotdigit
+
+parsenotdigits1 ::
+  (Monad p, CharParsing p) =>
+  p String
+parsenotdigits1 =
+  some parsenotdigit
+
+skipnotdigits ::
+  (Monad p, CharParsing p) =>
+  p ()
+skipnotdigits =
+  skipMany parsenotdigit
+
+skipnotdigits1 ::
+  (Monad p, CharParsing p) =>
+  p ()
+skipnotdigits1 =
+  skipSome parsenotdigit
 
 instance Show Digit where
   show = show . fromEnum
