diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,8 @@
 # Change log
 
+## Version 0.9.1
+- Upgrade to GHC 8.10.4
+
 ## Version 0.9.0
 - Changed attributeError to evolveError
 - Added new instruction NewArray to correctly model array behaviour
diff --git a/jvm-binary.cabal b/jvm-binary.cabal
--- a/jvm-binary.cabal
+++ b/jvm-binary.cabal
@@ -1,13 +1,11 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.33.0.
+-- This file has been generated from package.yaml by hpack version 0.34.4.
 --
 -- see: https://github.com/sol/hpack
---
--- hash: 3eccf421837ee1c579e393ed97d897fa8a716f1758cf440c9a85110a0351686c
 
 name:           jvm-binary
-version:        0.9.0
+version:        0.10.0
 synopsis:       A library for reading Java class-files
 description:    A library for reading Java class-files.
 category:       Language, Java, JVM
@@ -68,7 +66,7 @@
   ghc-options: -Wall
   build-depends:
       attoparsec
-    , base >=4.9 && <4.13
+    , base >=4.9 && <4.15
     , binary
     , bytestring
     , containers
@@ -113,7 +111,7 @@
   build-depends:
       QuickCheck
     , attoparsec
-    , base >=4.9 && <4.13
+    , base >=4.9 && <4.15
     , binary
     , bytestring
     , containers
@@ -145,7 +143,7 @@
   ghc-options: -rtsopts -O2 -threaded -funbox-strict-fields -with-rtsopts=-N
   build-depends:
       attoparsec
-    , base >=4.9 && <4.13
+    , base >=4.9 && <4.15
     , binary
     , bytestring
     , containers
diff --git a/src/Language/JVM/Attribute/Base.hs b/src/Language/JVM/Attribute/Base.hs
--- a/src/Language/JVM/Attribute/Base.hs
+++ b/src/Language/JVM/Attribute/Base.hs
@@ -39,7 +39,6 @@
 import           Control.Monad
 import           Control.Applicative
 import           Data.Maybe
-import           Data.Bifunctor
 import qualified Data.List            as List
 
 -- binary
@@ -206,4 +205,8 @@
 
 readFromStrict :: Binary a => Attribute r -> Either String a
 readFromStrict =
-    bimap trd trd . decodeOrFail . BL.fromStrict . aInfo
+    either (Left . trd) tst . decodeOrFail . BL.fromStrict . aInfo
+    where
+      tst :: (BL.ByteString, ByteOffset, a) -> Either String a
+      tst (s, _, a) = 
+        if BL.null s then Right a else Left "Incomplete attribute parsing"
diff --git a/src/Language/JVM/Attribute/StackMapTable.hs b/src/Language/JVM/Attribute/StackMapTable.hs
--- a/src/Language/JVM/Attribute/StackMapTable.hs
+++ b/src/Language/JVM/Attribute/StackMapTable.hs
@@ -137,7 +137,7 @@
           putWord8 (251 - w)
           putWord16be off
         | otherwise ->
-          fail $ "Can't write a cutoff value outside ]0,3], but was: " ++ show w
+          error $ "Can't write a cutoff value outside ]0,3], but was: " ++ show w
 
       AppendFrame vs
         | length vs <= 3 && 0 < length vs -> do
@@ -145,7 +145,7 @@
           putWord16be off
           mapM_ put vs
         | otherwise ->
-          fail $ "The AppendFrame has to contain at least 1 and at most 3 elements: " ++ show vs
+          error $ "The AppendFrame has to contain at least 1 and at most 3 elements: " ++ show vs
 
       FullFrame ls1 ls2 -> do
         putWord8 255
