diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,10 @@
 Changelog
 =========
 
+3.2.0
+-----
+- Updated for `megaparsec-6` and GHC 8.2.
+
 3.1.1
 -----
 - Added instances for common typeclasses: `Generic`, `NFData`, and
diff --git a/Data/Versions.hs b/Data/Versions.hs
--- a/Data/Versions.hs
+++ b/Data/Versions.hs
@@ -91,10 +91,11 @@
 import Data.Hashable
 import Data.List (intersperse)
 import Data.Monoid
-import Data.Text (Text,pack,snoc)
+import Data.Text (Text,pack,unpack,snoc)
+import Data.Void
 import GHC.Generics
 import Text.Megaparsec
-import Text.Megaparsec.Text
+import Text.Megaparsec.Char
 
 ---
 
@@ -378,7 +379,7 @@
 data VSep = VColon | VHyphen | VPlus | VUnder deriving (Eq,Show,Generic,NFData,Hashable)
 
 -- | A synonym for the more verbose `megaparsec` error type.
-type ParsingError = ParseError (Token Text) Dec
+type ParsingError = ParseError (Token Text) Void
 
 -- | A wrapper for a parser function. Can be composed via their
 -- Monoid instance, such that a different parser can be tried
@@ -407,46 +408,46 @@
 semver = parse (semver' <* eof) "Semantic Version"
 
 -- | Internal megaparsec parser of 'semverP'.
-semver' :: Parser SemVer
+semver' :: Parsec Void Text SemVer
 semver' = SemVer <$> major <*> minor <*> patch <*> preRel <*> metaData
 
 -- | Parse a group of digits, which can't be lead by a 0, unless it is 0.
-digits :: Parser Int
-digits = read <$> (string "0" <|> some digitChar)
+digits :: Parsec Void Text Int
+digits = read <$> ((unpack <$> string "0") <|> some digitChar)
 
-major :: Parser Int
+major :: Parsec Void Text Int
 major = digits <* char '.'
 
-minor :: Parser Int
+minor :: Parsec Void Text Int
 minor = major
 
-patch :: Parser Int
+patch :: Parsec Void Text Int
 patch = digits
 
-preRel :: Parser [VChunk]
+preRel :: Parsec Void Text [VChunk]
 preRel = (char '-' *> chunks) <|> pure []
 
-metaData :: Parser [VChunk]
+metaData :: Parsec Void Text [VChunk]
 metaData = (char '+' *> chunks) <|> pure []
 
-chunks :: Parser [VChunk]
+chunks :: Parsec Void Text [VChunk]
 chunks = chunk `sepBy` char '.'
 
 -- | Handling @0@ is a bit tricky. We can't allow runs of zeros in a chunk,
 -- since a version like @1.000.1@ would parse as @1.0.1@.
-chunk :: Parser VChunk
+chunk :: Parsec Void Text VChunk
 chunk = try zeroWithLetters <|> oneZero <|> many (iunit <|> sunit)
-  where oneZero = (:[]) . Digits . read <$> string "0"
+  where oneZero = (:[]) . Digits . read . unpack <$> string "0"
         zeroWithLetters = do
-          z <- Digits . read <$> string "0"
+          z <- Digits . read . unpack <$> string "0"
           s <- some sunit
           c <- chunk
           pure $ (z : s) ++ c
 
-iunit :: Parser VUnit
+iunit :: Parsec Void Text VUnit
 iunit = Digits . read <$> some digitChar
 
-sunit :: Parser VUnit
+sunit :: Parsec Void Text VUnit
 sunit = Str . pack <$> some letterChar
 
 -- | A wrapped `Version` parser. Can be composed with other parsers.
@@ -458,10 +459,10 @@
 version = parse (version' <* eof) "Version"
 
 -- | Internal megaparsec parser of 'versionP'.
-version' :: Parser Version
+version' :: Parsec Void Text Version
 version' = Version <$> optional (try epoch) <*> chunks <*> preRel
 
-epoch :: Parser Int
+epoch :: Parsec Void Text Int
 epoch = read <$> (some digitChar <* char ':')
 
 -- | A wrapped `Mess` parser. Can be composed with other parsers.
@@ -473,19 +474,19 @@
 mess = parse (mess' <* eof) "Mess"
 
 -- | Internal megaparsec parser of 'messP'.
-mess' :: Parser Mess
+mess' :: Parsec Void Text Mess
 mess' = try node <|> leaf
 
-leaf :: Parser Mess
+leaf :: Parsec Void Text Mess
 leaf = VLeaf <$> tchunks
 
-node :: Parser Mess
+node :: Parsec Void Text Mess
 node = VNode <$> tchunks <*> sep <*> mess'
 
-tchunks :: Parser [Text]
+tchunks :: Parsec Void Text [Text]
 tchunks = (pack <$> some (letterChar <|> digitChar)) `sepBy` char '.'
 
-sep :: Parser VSep
+sep :: Parsec Void Text VSep
 sep = choice [ VColon  <$ char ':'
              , VHyphen <$ char '-'
              , VPlus   <$ char '+'
diff --git a/versions.cabal b/versions.cabal
--- a/versions.cabal
+++ b/versions.cabal
@@ -1,9 +1,9 @@
--- This file has been generated from package.yaml by hpack version 0.17.1.
+-- This file has been generated from package.yaml by hpack version 0.17.0.
 --
 -- see: https://github.com/sol/hpack
 
 name:           versions
-version:        3.1.1
+version:        3.2.0
 synopsis:       Types and parsers for software version numbers.
 description:    A library for parsing and comparing software version numbers.
                 We like to give version numbers to our software in a myriad of
@@ -42,9 +42,9 @@
   exposed-modules:
       Data.Versions
   build-depends:
-      base >=4.8 && <4.10
+      base >=4.8 && <4.11
     , text >=1.2 && <1.3
-    , megaparsec >=4 && <6
+    , megaparsec >=6 && <7
     , deepseq >= 1.4 && < 1.5
     , hashable >= 1.2 && < 1.3
   default-language: Haskell2010
@@ -53,7 +53,7 @@
 test-suite versions-test
   type: exitcode-stdio-1.0
   build-depends:
-      base >=4.8 && <4.10
+      base >=4.8 && <4.11
     , text >=1.2 && <1.3
     , microlens >=0.4 && <0.5
     , tasty >=0.10.1.2
