diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,15 @@
 The format is based on [Keep a Changelog](http://keepachangelog.com/)
 and this project adheres to [Semantic Versioning](http://semver.org/).
 
+## [0.6.2] - 2019-12-22
+
+- `megaparsec` `0.8` is compatible as well as `0.7`.
+- Support for local and remote file source remotes without hashes. Some old versions of might have these. `FileRemoteNoIntegrity` and `FileLocalNoIntegrity`.
+
+## [0.6.1] - 2019-11-03
+
+- Update `megaparsec` dependency to `0.7`.
+
 ## [0.6.0] - 2018-12-19
 
 ### Added
diff --git a/src/Yarn/Lock/File.hs b/src/Yarn/Lock/File.hs
--- a/src/Yarn/Lock/File.hs
+++ b/src/Yarn/Lock/File.hs
@@ -155,18 +155,20 @@
         checkFileLocal = do
           resolved <- vToM $ getField text "resolved" fs
           let (file, mayHash) = findUrlHash resolved
-          fileLocalSha1 <- mayHash
           fileLocalPath <- if "file:" `Text.isPrefixOf` file
                            then Just $ noPrefix "file:" file
                            else Nothing
-          pure $ T.FileLocal{..}
+          case mayHash of
+            Just hash -> pure (T.FileLocal fileLocalPath hash)
+            Nothing   -> pure (T.FileLocalNoIntegrity fileLocalPath)
 
         checkFile :: Maybe T.Remote
         checkFile = do
           resolved <- vToM (getField text "resolved" fs)
-          let (fileUrl, mayFileSha1) = findUrlHash resolved
-          fileSha1 <- mayFileSha1
-          pure $ T.FileRemote{..}
+          let (fileUrl, mayHash) = findUrlHash resolved
+          case mayHash of
+            Just hash -> pure (T.FileRemote fileUrl hash)
+            Nothing   -> pure (T.FileRemoteNoIntegrity fileUrl)
 
         -- | ensure the prefix is removed
         noPrefix :: Text -> Text -> Text
diff --git a/src/Yarn/Lock/Types.hs b/src/Yarn/Lock/Types.hs
--- a/src/Yarn/Lock/Types.hs
+++ b/src/Yarn/Lock/Types.hs
@@ -69,6 +69,9 @@
   , fileSha1    :: Text -- ^ sha1 hash of the file (attached to the link)
 
   }
+  | FileRemoteNoIntegrity
+  { fileNoIntegrityUrl :: Text -- ^ URL to a remote file
+  }
   | GitRemote
   { gitRepoUrl  :: Text -- ^ valid git remote URL
   , gitRev      :: Text -- ^ git tree-ish (commit, branch, &c.)
@@ -77,4 +80,7 @@
   | FileLocal
   { fileLocalPath :: Text -- ^ (relative) path to file on the local machine
   , fileLocalSha1 :: Text -- ^ sha1 hash of the file (attached to the link)
+  }
+  | FileLocalNoIntegrity
+  { fileLocalNoIntegrityPath :: Text -- ^ (relative) path to file on the local machine
   } deriving (Eq, Show)
diff --git a/tests/TestFile.hs b/tests/TestFile.hs
--- a/tests/TestFile.hs
+++ b/tests/TestFile.hs
@@ -51,28 +51,38 @@
   let sha = "helloimref"
       good = minimalAst $
           [ ("resolved", Left $ "https://gnu.org/stallmanstoe#" <> sha) ]
-      bad = minimalAst [ ("resolved", Left "https://nohash") ]
+      goodNoIntegrity = minimalAst $
+          [ ("resolved", Left $ "https://gnu.org/stallmanstoe") ]
   astToPackageSuccess good
     <&> T.remote >>= \case
-      T.FileRemote{..} -> assertEqual "file sha" sha fileSha1
+      T.FileRemote{..} -> do
+        assertEqual "remote url" "https://gnu.org/stallmanstoe" fileUrl
+        assertEqual "file sha" sha fileSha1
       a -> assertFailure ("should be FileRemote, is " <> show a)
-  astToPackageFailureWith (pure File.UnknownRemoteType) bad
+  astToPackageSuccess goodNoIntegrity
+    <&> T.remote >>= \case
+      T.FileRemoteNoIntegrity{..} -> assertEqual "remote url" "https://gnu.org/stallmanstoe" fileNoIntegrityUrl
+      a -> assertFailure ("should be FileRemote, is " <> show a)
 
 case_fileLocal :: Assertion
 case_fileLocal = do
   let good = minimalAst $
         [ ("resolved"
           , Left $ "file:../extensions/jupyterlab-toc-0.6.0.tgz#393fe") ]
-      bad = minimalAst $
+      goodNoIntegrity = minimalAst $
         [ ("resolved"
-          , Left $ "\"file:some/file/nohash\"") ]
+          , Left $ "file:../extensions/jupyterlab-toc-0.6.0.tgz") ]
   astToPackageSuccess good
     <&> T.remote >>= \case
       T.FileLocal{..} -> do
         assertEqual "file path" "../extensions/jupyterlab-toc-0.6.0.tgz" fileLocalPath
         assertEqual "file sha" "393fe" fileLocalSha1
       a -> assertFailure ("should be FileLocal, is " <> show a)
-  astToPackageFailureWith (pure File.UnknownRemoteType) bad
+  astToPackageSuccess goodNoIntegrity
+    <&> T.remote >>= \case
+      T.FileLocalNoIntegrity{..} -> do
+        assertEqual "file path" "../extensions/jupyterlab-toc-0.6.0.tgz" fileLocalNoIntegrityPath
+      a -> assertFailure ("should be FileLocal, is " <> show a)
 
 case_missingField :: Assertion
 case_missingField = do
diff --git a/yarn-lock.cabal b/yarn-lock.cabal
--- a/yarn-lock.cabal
+++ b/yarn-lock.cabal
@@ -1,13 +1,13 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.31.2.
+-- This file has been generated from package.yaml by hpack version 0.33.0.
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: d82313ce33d9f08b44f33c038434abea15c408bbc42e3798603a87412d1cb0ed
+-- hash: dc2ffdfc08b066957d4928034489010aacd67ec2a4833ddf99497364bbd82670
 
 name:           yarn-lock
-version:        0.6.1
+version:        0.6.2
 synopsis:       Represent and parse yarn.lock files
 description:    Types and parser for the lock file format of the npm successor yarn. All modules should be imported qualified.
 category:       Data
@@ -42,7 +42,7 @@
       base ==4.*
     , containers
     , either >=4 && <6
-    , megaparsec ==7.*
+    , megaparsec >=7 && <9
     , protolude ==0.2.*
     , text
   default-language: Haskell2010
@@ -63,7 +63,7 @@
     , base ==4.*
     , containers
     , either >=4 && <6
-    , megaparsec ==7.*
+    , megaparsec >=7 && <9
     , neat-interpolation >=0.3
     , protolude
     , quickcheck-instances ==0.3.*
