diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,8 @@
 # Change Log
 
+## 0.10.5 - 2020-11-16
+* Support aeson >= 2
+
 ## 0.10.1 - 2018-03-12
 * MonadFail instance to R.
 
diff --git a/inline-r.cabal b/inline-r.cabal
--- a/inline-r.cabal
+++ b/inline-r.cabal
@@ -1,5 +1,5 @@
 name:                inline-r
-version:             0.10.4
+version:             0.10.5
 license:             BSD3
 license-file:        LICENSE
 copyright:           Copyright (c) 2013-2015 Amgen, Inc.
@@ -88,7 +88,7 @@
                      , process >= 1.2
                      , reflection >= 2
                      , setenv >= 0.1.1
-                     , singletons >= 0.9
+                     , singletons >= 0.9 && < 3
                      , template-haskell >= 2.8
                      , text >= 0.11
                      , th-lift >= 0.6
diff --git a/src/Foreign/R/Type.hsc b/src/Foreign/R/Type.hsc
--- a/src/Foreign/R/Type.hsc
+++ b/src/Foreign/R/Type.hsc
@@ -1,6 +1,7 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE ConstraintKinds #-}
 {-# LANGUAGE DataKinds #-}
+{-# LANGUAGE DeriveLift #-}
 {-# LANGUAGE ExistentialQuantification #-}
 {-# LANGUAGE GADTs #-}
 #if __GLASGOW_HASKELL__ >= 810
@@ -53,7 +54,6 @@
 import Internal.Error
 
 import qualified Language.Haskell.TH.Syntax as Hs
-import qualified Language.Haskell.TH.Lib as Hs
 
 import Data.Singletons.TH
 
@@ -102,7 +102,7 @@
     | New
     | Free
     | Fun
-    deriving (Eq, Ord, Show)
+    deriving (Eq, Ord, Show, Hs.Lift)
 
 instance Enum SEXPTYPE where
   fromEnum Nil        = #const NILSXP
@@ -166,9 +166,6 @@
   rnf = (`seq` ())
 
 genSingletons [''SEXPTYPE]
-
-instance Hs.Lift SEXPTYPE where
-  lift a = [| $(Hs.conE (Hs.mkName $ "Foreign.R.Type." ++ show a)) |]
 
 -- | Used where the R documentation speaks of "pairlists", which are really just
 -- regular lists.
diff --git a/src/Language/R/Debug.hs b/src/Language/R/Debug.hs
--- a/src/Language/R/Debug.hs
+++ b/src/Language/R/Debug.hs
@@ -20,6 +20,7 @@
   where
 
 import Control.Memory.Region (V)
+import Data.String (fromString)
 import qualified Data.Vector.SEXP as Vector
 import qualified Foreign.R as R
 import Foreign.R (SEXP, SomeSEXP(..), SEXPTYPE, SEXPInfo)
@@ -74,7 +75,7 @@
       miss = R.unsexp H.missingArg
       info = unsafePerformIO $ R.peekInfo x
       attr = unsafePerformIO $ R.getAttributes x
-      tp = T.pack . show $ R.infoType info
+      tp = fromString . show $ R.infoType info
       go :: SEXP s a -> Value
       go y | R.unsexp y == ub   = A.String "UnboundValue"
            | R.unsexp y == nil  = A.String "NilValue"
diff --git a/src/Language/R/Literal.hs b/src/Language/R/Literal.hs
--- a/src/Language/R/Literal.hs
+++ b/src/Language/R/Literal.hs
@@ -144,26 +144,18 @@
 instance Literal [R.Logical] 'R.Logical where
     mkSEXPIO = mkSEXPVectorIO sing . map return
     fromSEXP (hexp -> Logical v) = SVector.toList v
-    fromSEXP _ =
-        failure "fromSEXP" "Logical expected where some other expression appeared."
 
 instance Literal [Int32] 'R.Int where
     mkSEXPIO = mkSEXPVectorIO sing . map return
     fromSEXP (hexp -> Int v) = SVector.toList v
-    fromSEXP _ =
-        failure "fromSEXP" "Int expected where some other expression appeared."
 
 instance Literal [Double] 'R.Real where
     mkSEXPIO = mkSEXPVectorIO sing . map return
     fromSEXP (hexp -> Real v) = SVector.toList v
-    fromSEXP _ =
-        failure "fromSEXP" "Numeric expected where some other expression appeared."
 
 instance Literal [Complex Double] 'R.Complex where
     mkSEXPIO = mkSEXPVectorIO sing . map return
     fromSEXP (hexp -> Complex v) = SVector.toList v
-    fromSEXP _ =
-        failure "fromSEXP" "Complex expected where some other expression appeared."
 
 instance Literal [String] 'R.String where
     mkSEXPIO =
@@ -171,8 +163,6 @@
         map (\str -> GHC.withCString utf8 str (R.mkCharCE R.CE_UTF8))
     fromSEXP (hexp -> String v) =
         map (\(hexp -> Char xs) -> SVector.toString xs) (SVector.toList v)
-    fromSEXP _ =
-        failure "fromSEXP" "String expected where some other expression appeared."
 
 instance Literal Text 'R.String where
     mkSEXPIO s =
@@ -184,8 +174,6 @@
         [hexp -> Char x] -> SVector.unsafeWithByteString x $ \p -> do
            pure $ T.decodeUtf8 p
         _ -> failure "fromSEXP" "Not a singleton vector"
-    fromSEXP _ =
-      failure "fromSEXP" "String expected where some other expression appeared."
 
 -- | Create a pairlist from an association list. Result is either a pairlist or
 -- @nilValue@ if the input is the null list. These are two distinct forms. Hence
@@ -225,8 +213,6 @@
     fromSEXP x@(hexp -> String {})
       | [h] <- fromSEXP x = h
       | otherwise = failure "fromSEXP" "Not a singleton vector."
-    fromSEXP _ =
-        failure "fromSEXP" "String expected where some other expression appeared."
 
 instance SVector.SVECTOR ty a => Literal (SVector.Vector ty a) ty where
     mkSEXPIO = return . SVector.toSEXP
diff --git a/src/Language/R/Matcher.hs b/src/Language/R/Matcher.hs
--- a/src/Language/R/Matcher.hs
+++ b/src/Language/R/Matcher.hs
@@ -294,7 +294,6 @@
 charList :: SEXP s 'R.String -> [String]
 charList (H.hexp -> String v) =
   map ((\(Char s) -> SV.toString s) . H.hexp) $ SV.toList v
-charList _ = error "Impossible happened."
 
 -- | Get 'dim' attribute.
 dim :: Matcher s [Int]
@@ -302,7 +301,6 @@
   where
     go :: SEXP s 'R.Int -> [Int]
     go (H.hexp -> Int v) = fromIntegral <$> SV.toList v
-    go _ = error "Impossible happened."
 
 -- | Get 'dimnames' attribute.
 dimnames :: Matcher s [[String]]
diff --git a/src/Language/R/QQ.hs b/src/Language/R/QQ.hs
--- a/src/Language/R/QQ.hs
+++ b/src/Language/R/QQ.hs
@@ -99,7 +99,6 @@
 
 isAnti :: SEXP s 'R.Char -> Bool
 isAnti (hexp -> Char (Vector.toString -> name)) = antiSuffix `isSuffixOf` name
-isAnti _ = error "Impossible"
 
 -- | Chop antiquotation variable names to get the corresponding Haskell variable name.
 chop :: String -> String
