diff --git a/Codec/Encryption/OpenPGP/KeyringParser.hs b/Codec/Encryption/OpenPGP/KeyringParser.hs
--- a/Codec/Encryption/OpenPGP/KeyringParser.hs
+++ b/Codec/Encryption/OpenPGP/KeyringParser.hs
@@ -105,8 +105,10 @@
 brokenTK _ = fail "Unexpected broken packet type"
 
 pkPayload :: Parser [Pkt] (PKPayload, Maybe SKAddendum)
-pkPayload = do [PublicKeyPkt p] <- satisfy isPKP
-               return (p, Nothing)
+pkPayload = do pkpkts <- satisfy isPKP
+               case pkpkts of
+                   [PublicKeyPkt p] -> return (p, Nothing)
+                   _ -> failure
     where
         isPKP [PublicKeyPkt _] = True
         isPKP _ = False
@@ -129,25 +131,34 @@
         isSP' _ = False
 
 signedUID :: Bool -> Parser [Pkt] (UidOrUat, [SignaturePayload])
-signedUID intolerant = do [UserIdPkt u] <- satisfy isUID
-                          sigs <- concatMany (signature intolerant [GenericCert, PersonaCert, CasualCert, PositiveCert, CertRevocationSig])
-                          return (I u, sigs)
+signedUID intolerant = do upkts <- satisfy isUID
+                          case upkts of
+                              [UserIdPkt u] -> do
+                                  sigs <- concatMany (signature intolerant [GenericCert, PersonaCert, CasualCert, PositiveCert, CertRevocationSig])
+                                  return (I u, sigs)
+                              _ -> failure
     where
         isUID [UserIdPkt _] = True
         isUID _ = False
 
 signedUAt :: Bool -> Parser [Pkt] (UidOrUat, [SignaturePayload])
-signedUAt intolerant = do [UserAttributePkt us] <- satisfy isUAt
-                          sigs <- concatMany (signature intolerant [GenericCert, PersonaCert, CasualCert, PositiveCert, CertRevocationSig])
-                          return (A us, sigs)
+signedUAt intolerant = do uapkts <- satisfy isUAt
+                          case uapkts of
+                              [UserAttributePkt us] -> do
+                                  sigs <- concatMany (signature intolerant [GenericCert, PersonaCert, CasualCert, PositiveCert, CertRevocationSig])
+                                  return (A us, sigs)
+                              _ -> failure
     where
         isUAt [UserAttributePkt _] = True
         isUAt _ = False
 
 signedOrRevokedPubSubkey :: Bool -> Parser [Pkt] [(Pkt, [SignaturePayload])]
-signedOrRevokedPubSubkey intolerant = do [p] <- satisfy isPSKP
-                                         sigs <- concatMany (signature intolerant [SubkeyBindingSig, SubkeyRevocationSig])
-                                         return [(p, sigs)]
+signedOrRevokedPubSubkey intolerant = do pskpkts <- satisfy isPSKP
+                                         case pskpkts of
+                                             [p] -> do
+                                                 sigs <- concatMany (signature intolerant [SubkeyBindingSig, SubkeyRevocationSig])
+                                                 return [(p, sigs)]
+                                             _ -> failure
     where
         isPSKP [PublicSubkeyPkt _] = True
         isPSKP _ = False
@@ -158,9 +169,12 @@
                      return []
 
 rawOrSignedOrRevokedSecSubkey :: Bool -> Parser [Pkt] [(Pkt, [SignaturePayload])]
-rawOrSignedOrRevokedSecSubkey intolerant = do [p] <- satisfy isSSKP
-                                              sigs <- concatMany (signature intolerant [SubkeyBindingSig, SubkeyRevocationSig])
-                                              return [(p, sigs)]
+rawOrSignedOrRevokedSecSubkey intolerant = do sskpkts <- satisfy isSSKP
+                                              case sskpkts of
+                                                  [p] -> do
+                                                      sigs <- concatMany (signature intolerant [SubkeyBindingSig, SubkeyRevocationSig])
+                                                      return [(p, sigs)]
+                                                  _ -> failure
     where
         isSSKP [SecretSubkeyPkt _ _] = True
         isSSKP _ = False
@@ -171,8 +185,10 @@
                      return []
 
 skPayload :: Parser [Pkt] (PKPayload, Maybe SKAddendum)
-skPayload = do [SecretKeyPkt p ska] <- satisfy isSKP
-               return (p, Just ska)
+skPayload = do spkts <- satisfy isSKP
+               case spkts of
+                   [SecretKeyPkt p ska] -> return (p, Just ska)
+                   _ -> failure
     where
         isSKP [SecretKeyPkt _ _] = True
         isSKP _ = False
diff --git a/hOpenPGP.cabal b/hOpenPGP.cabal
--- a/hOpenPGP.cabal
+++ b/hOpenPGP.cabal
@@ -1,5 +1,5 @@
 Name:                hOpenPGP
-Version:             2.7.4
+Version:             2.7.4.1
 Synopsis:            native Haskell implementation of OpenPGP (RFC4880)
 Description:         native Haskell implementation of OpenPGP (RFC4880), plus Camellia (RFC5581), plus ECC (RFC6637)
 Homepage:            https://salsa.debian.org/clint/hOpenPGP
@@ -342,4 +342,4 @@
 source-repository this
   type:     git
   location: https://salsa.debian.org/clint/hOpenPGP.git
-  tag:      v2.7.4
+  tag:      v2.7.4.1
