diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Revision history for hpath-directory
 
+## 0.14.1 -- ????-??-??
+
+- add `readFileStrict`
+
 ## 0.14.0 -- 2020-07-04
 
 * Fix `readFile` to do proper lazy IO
diff --git a/hpath-directory.cabal b/hpath-directory.cabal
--- a/hpath-directory.cabal
+++ b/hpath-directory.cabal
@@ -1,7 +1,7 @@
 cabal-version:       >=1.10
 
 name:                hpath-directory
-version:             0.14.0
+version:             0.14.1
 synopsis:            Alternative to 'directory' package with ByteString based filepaths
 description:         This provides a safer alternative to the 'directory'
                      package. FilePaths are ByteString based, so this
diff --git a/src/System/Posix/RawFilePath/Directory.hs b/src/System/Posix/RawFilePath/Directory.hs
--- a/src/System/Posix/RawFilePath/Directory.hs
+++ b/src/System/Posix/RawFilePath/Directory.hs
@@ -60,6 +60,7 @@
   , moveFile
   -- * File reading
   , readFile
+  , readFileStrict
   , readFileStream
   -- * File writing
   , writeFile
@@ -881,7 +882,23 @@
   SL.fromChunksIO stream
 
 
--- | Open the given file as a filestream. Once the filestream is
+-- |Read the given file strictly into memory.
+--
+-- Symbolic links are followed. File must exist.
+--
+-- Throws:
+--
+--     - `InappropriateType` if file is not a regular file or a symlink
+--     - `PermissionDenied` if we cannot read the file or the directory
+--        containting it
+--     - `NoSuchThing` if the file does not exist
+readFileStrict :: RawFilePath -> IO BS.ByteString
+readFileStrict path = do
+  stream <- readFileStream path
+  fmap fromArray $ S.foldr (<>) mempty stream
+
+
+-- | Open the given file as a filestream. Once the filestream
 -- exits, the filehandle is cleaned up.
 --
 -- Throws:
diff --git a/test/System/Posix/RawFilePath/Directory/ReadFileSpec.hs b/test/System/Posix/RawFilePath/Directory/ReadFileSpec.hs
--- a/test/System/Posix/RawFilePath/Directory/ReadFileSpec.hs
+++ b/test/System/Posix/RawFilePath/Directory/ReadFileSpec.hs
@@ -54,6 +54,38 @@
   describe "System.Posix.RawFilePath.Directory.readFile" $ do
 
     -- successes --
+    it "readFile file with content, everything clear" $ do
+      out <- readFileL "fileWithContent"
+      out `shouldBe` "Blahfaselgagaga"
+
+    it "readFile symlink, everything clear" $ do
+      out <- readFileL "inputFileSymL"
+      out `shouldBe` "Blahfaselgagaga"
+
+    it "readFile empty file, everything clear" $ do
+      out <- readFileL "fileWithoutContent"
+      out `shouldBe` ""
+
+
+    -- posix failures --
+    it "readFile directory, wrong file type" $ do
+      readFileL "alreadyExistsD"
+        `shouldThrow` (\e -> ioeGetErrorType e == InappropriateType)
+
+    it "readFile file, no permissions" $ do
+      readFileL "noPerms"
+        `shouldThrow` (\e -> ioeGetErrorType e == PermissionDenied)
+
+    it "readFile file, no permissions on dir" $ do
+      readFileL "noPermsD/inputFile"
+        `shouldThrow` (\e -> ioeGetErrorType e == PermissionDenied)
+
+    it "readFile file, no such file" $ do
+      readFileL "lalala"
+        `shouldThrow` (\e -> ioeGetErrorType e == NoSuchThing)
+
+
+    -- successes --
     it "readFile (Strict) file with content, everything clear" $ do
       out <- readFile' "fileWithContent"
       out `shouldBe` "Blahfaselgagaga"
@@ -83,3 +115,4 @@
     it "readFile (Strict) file, no such file" $ do
       readFile' "lalala"
         `shouldThrow` (\e -> ioeGetErrorType e == NoSuchThing)
+
diff --git a/test/Utils.hs b/test/Utils.hs
--- a/test/Utils.hs
+++ b/test/Utils.hs
@@ -41,7 +41,6 @@
   (
     ByteString
   )
-import qualified Data.ByteString.Lazy as L
 import System.Posix.FilePath
 import System.Posix.Files.ByteString
   (
@@ -289,5 +288,9 @@
 
 readFile' :: ByteString -> IO ByteString
 {-# NOINLINE readFile' #-}
-readFile' p = withTmpDir p (fmap L.toStrict . readFile)
+readFile' p = withTmpDir p readFileStrict
 
+
+readFileL :: ByteString -> IO BSL.ByteString
+{-# NOINLINE readFileL #-}
+readFileL p = withTmpDir p readFile
