diff --git a/ascii-superset.cabal b/ascii-superset.cabal
--- a/ascii-superset.cabal
+++ b/ascii-superset.cabal
@@ -1,7 +1,7 @@
 cabal-version: 3.0
 
 name: ascii-superset
-version: 1.2.7.0
+version: 1.3.0.0
 synopsis: Representing ASCII with refined supersets
 category: Data, Text
 
@@ -10,10 +10,6 @@
     is valid as ASCII, as well as a type constructor representing a
     value of a superset that is known to be valid ASCII.
 
-    It also defines the Lift class, which provides a polymorphic lift
-    operation that can be used to convert characters and strings into
-    types that support a larger set of characters.
-
 license: Apache-2.0
 license-file: license.txt
 
@@ -74,7 +70,6 @@
         ASCII.SupersetConversion
         ASCII.Isomorphism
         ASCII.Refinement
-        ASCII.Lift
 
     other-modules:
         ASCII.Refinement.Internal
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,13 @@
+### 1.3.0.0 (2023-02-28)
+
+Removed the `ASCII.Lift` module. The `Lift` class is now gone. It was a mess. It
+was not possible to define a comprehensive set of instances for this class, and
+as a user it was difficult to guess what types `lift` would work on.
+
+All of the `lift` implementations were just other functions anyway: `fromChar`,
+`fromCharList`, `ASCII.Refinement.lift`, etc. Use one of those other polymorphic
+but slightly more specific functions instead.
+
 ### 1.2.7.0 (2023-02-08)
 
 Add module `ASCII.Superset.Text`
diff --git a/library/ASCII/Lift.hs b/library/ASCII/Lift.hs
deleted file mode 100644
--- a/library/ASCII/Lift.hs
+++ /dev/null
@@ -1,52 +0,0 @@
-{-|
-
-@
-(lift CapitalLetterA :: Word8) == 65
-
-(lift [CapitalLetterH, SmallLetterI, ExclamationMark] :: Text) == "Hi!"
-@ -}
-module ASCII.Lift (Lift (..)) where
-
-import ASCII.CaseRefinement (ASCII'case)
-import ASCII.Char (Char)
-import ASCII.Refinement.Internal (ASCII)
-import ASCII.Superset (CharSuperset, StringSuperset)
-
-import qualified ASCII.CaseRefinement as CaseRefinement
-import qualified ASCII.Refinement.Internal as Refinement
-import qualified ASCII.Superset as S
-
-{-| Embedding of one character set within another
-
-The @subset@ and @superset@ types may be characters or strings in
-ASCII, some subset of ASCII, or some superset of ASCII. -}
-class Lift subset superset where
-
-    {-| Converts from a smaller to a larger type
-
-    Due to the highly polymorphic nature of the 'lift' function,
-    often it must used with an explicit type signature or type
-    application to avoid any type ambiguity. -}
-
-    lift :: subset -> superset
-
-instance Lift a a where lift x = x
-
-{-| A value from an ASCII superset that has been refined by the 'ASCII' type
-constructor may be lifted back into the superset by unwrapping it from the
-'ASCII' type. -}
-instance Lift (ASCII superset) superset where lift = Refinement.lift
-
-instance Lift (ASCII'case letterCase superset) superset where lift = CaseRefinement.lift
-
-instance Lift (ASCII'case letterCase superset) (ASCII superset) where lift = CaseRefinement.forgetCase
-
-{-| An ASCII 'Char' may be 'lift'ed into any larger character set (a
-'CharSuperset'); for example, 'lift' can convert an ASCII character into a value
-of the standard 'Prelude.Char' type in "Prelude". -}
-instance CharSuperset superset => Lift Char superset where lift = S.fromChar
-
-{-| An ASCII 'Char' list may be 'lift'ed into a string of any larger character
-set (a 'StringSuperset'); for example, 'lift' can convert a list of ASCII
-characters into a value of the standard 'Prelude.String' type in "Prelude". -}
-instance StringSuperset superset => Lift [Char] superset where lift = S.fromCharList
diff --git a/readme.md b/readme.md
--- a/readme.md
+++ b/readme.md
@@ -1,7 +1,3 @@
 This package defines classes which describe what subset of a type is valid as
 ASCII, as well as a type constructor representing a value of a superset that is
 known to be valid ASCII.
-
-It also defines the `Lift` class, which provides a polymorphic lift operation
-that can be used to convert characters and strings into types that support a
-larger set of characters.
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -6,12 +6,12 @@
 import ASCII.CaseRefinement (ASCII'lower, ASCII'upper, asciiCaseUnsafe)
 import ASCII.Char (Char (..))
 import ASCII.Refinement (ASCII, asciiUnsafe)
+import ASCII.Superset (fromChar, fromCharList)
 
 import qualified ASCII.Case as Case
 import qualified ASCII.Caseless as CC
 import qualified ASCII.CaseRefinement as CaseRefinement
 import qualified ASCII.Char as ASCII
-import qualified ASCII.Lift as Lift
 import qualified ASCII.Refinement as Refinement
 import qualified ASCII.Superset as Superset
 
@@ -28,31 +28,19 @@
 main :: IO ()
 main = hspec $ do
 
-    describe "lift" $ do
+    describe "fromChar" $ do
 
         it "letter" $ do
-            let f x = Lift.lift x :: Word8
+            let f x = fromChar x :: Word8
             f CapitalLetterA `shouldBe` 65
 
         it "to unicode" $ do
-            let f = Lift.lift
+            let f = fromChar
             f CapitalLetterA `shouldBe` 'A'
 
-        it "list to Text" $ do
-            let f x = Lift.lift x :: Text
-            f [CapitalLetterH, SmallLetterI, ExclamationMark] `shouldBe` "Hi!"
-
-        it "list to ASCII Text" $ do
-            let f x = Lift.lift x :: ASCII Text
-            f [CapitalLetterH, SmallLetterI, ExclamationMark] `shouldBe` (asciiUnsafe "Hi!")
-
-        it "ASCII Word8" $ do
-            let f x = Lift.lift (x :: ASCII Word8) :: Word8
-            f (asciiUnsafe 65) `shouldBe` 65
-
-        it "can be id" $ do
-            let f x = Lift.lift (x :: Unicode.Char) :: Unicode.Char
-            f 'x' `shouldBe` 'x'
+        it "id" $ do
+            let f x = fromChar (x :: ASCII.Char) :: ASCII.Char
+            f CapitalLetterA `shouldBe` CapitalLetterA
 
     describe "refinement" $ do
 
@@ -63,10 +51,15 @@
             f 97 `shouldBe` Just (asciiUnsafe 97)
             f 128 `shouldBe` Nothing
 
-        it "fromCharList" $ do
-            let f x = Refinement.fromCharList x :: ASCII Text
-            f [CapitalLetterH, SmallLetterI, ExclamationMark] `shouldBe` asciiUnsafe "Hi!"
+        describe "fromCharList" $ do
+            it "Text" $ do
+                let f x = fromCharList x :: Text
+                f [CapitalLetterH, SmallLetterI, ExclamationMark] `shouldBe` "Hi!"
 
+            it "ASCII Text" $ do
+                let f x = Refinement.fromCharList x :: ASCII Text
+                f [CapitalLetterH, SmallLetterI, ExclamationMark] `shouldBe` asciiUnsafe "Hi!"
+
         it "toCharList" $ do
             let f x = Refinement.toCharList
                           (Refinement.substituteString x :: ASCII Text)
@@ -149,8 +142,8 @@
                 check =
                     ([UpperCase, LowerCase] & Foldable.all (\c ->
                         ASCII.allCharacters & Foldable.all (\x ->
-                            Superset.toCaseChar c (Superset.fromChar @a x)
-                                == Superset.fromChar @a (Case.toCase c x)
+                            Superset.toCaseChar c (fromChar @a x)
+                                == fromChar @a (Case.toCase c x)
                     ))) `shouldBe` True
             it "ASCII.Char" $ check @ASCII.Char
             it "Unicode.Char" $ check @Unicode.Char
