diff --git a/cabal-gild.cabal b/cabal-gild.cabal
--- a/cabal-gild.cabal
+++ b/cabal-gild.cabal
@@ -11,7 +11,7 @@
 maintainer: Taylor Fausak
 name: cabal-gild
 synopsis: Formats package descriptions.
-version: 1.5.0.2
+version: 1.5.0.3
 
 source-repository head
   type: git
@@ -109,23 +109,16 @@
     CabalGild.Unstable.Type.Context
     CabalGild.Unstable.Type.Dependency
     CabalGild.Unstable.Type.DiscoverTarget
-    CabalGild.Unstable.Type.ExeDependency
     CabalGild.Unstable.Type.Extension
     CabalGild.Unstable.Type.Flag
-    CabalGild.Unstable.Type.ForeignLibOption
     CabalGild.Unstable.Type.Input
-    CabalGild.Unstable.Type.Language
-    CabalGild.Unstable.Type.LegacyExeDependency
     CabalGild.Unstable.Type.Leniency
     CabalGild.Unstable.Type.Line
     CabalGild.Unstable.Type.List
     CabalGild.Unstable.Type.Mixin
     CabalGild.Unstable.Type.Mode
-    CabalGild.Unstable.Type.ModuleReexport
     CabalGild.Unstable.Type.Optional
     CabalGild.Unstable.Type.Output
-    CabalGild.Unstable.Type.PkgconfigDependency
-    CabalGild.Unstable.Type.PkgconfigVersionRange
     CabalGild.Unstable.Type.Pragma
     CabalGild.Unstable.Type.Set
     CabalGild.Unstable.Type.SomeParsecParser
diff --git a/source/library/CabalGild/Unstable/Action/FormatFields.hs b/source/library/CabalGild/Unstable/Action/FormatFields.hs
--- a/source/library/CabalGild/Unstable/Action/FormatFields.hs
+++ b/source/library/CabalGild/Unstable/Action/FormatFields.hs
@@ -8,14 +8,8 @@
 import qualified CabalGild.Unstable.Extra.String as String
 import qualified CabalGild.Unstable.Type.Condition as Condition
 import qualified CabalGild.Unstable.Type.Dependency as Dependency
-import qualified CabalGild.Unstable.Type.ExeDependency as ExeDependency
 import qualified CabalGild.Unstable.Type.Extension as Extension
-import qualified CabalGild.Unstable.Type.ForeignLibOption as ForeignLibOption
-import qualified CabalGild.Unstable.Type.Language as Language
-import qualified CabalGild.Unstable.Type.LegacyExeDependency as LegacyExeDependency
 import qualified CabalGild.Unstable.Type.Mixin as Mixin
-import qualified CabalGild.Unstable.Type.ModuleReexport as ModuleReexport
-import qualified CabalGild.Unstable.Type.PkgconfigDependency as PkgconfigDependency
 import qualified CabalGild.Unstable.Type.SomeParsecParser as SPP
 import qualified CabalGild.Unstable.Type.TestedWith as TestedWith
 import qualified CabalGild.Unstable.Type.Variable as Variable
@@ -29,6 +23,12 @@
 import qualified Distribution.ModuleName as ModuleName
 import qualified Distribution.Parsec as Parsec
 import qualified Distribution.Parsec.FieldLineStream as FieldLineStream
+import qualified Distribution.Types.ExeDependency as ExeDependency
+import qualified Distribution.Types.ForeignLibOption as ForeignLibOption
+import qualified Distribution.Types.LegacyExeDependency as LegacyExeDependency
+import qualified Distribution.Types.ModuleReexport as ModuleReexport
+import qualified Distribution.Types.PkgconfigDependency as PkgconfigDependency
+import qualified Language.Haskell.Extension as Haskell
 import qualified Text.PrettyPrint as PrettyPrint
 
 -- | A wrapper around 'field' to allow this to be composed with other actions.
@@ -193,7 +193,7 @@
           "mixins" =: SPP.set @Newtypes.CommaVCat @(Identity.Identity Mixin.Mixin),
           "options" =: SPP.set @Newtypes.FSep @(Identity.Identity ForeignLibOption.ForeignLibOption),
           "other-extensions" =: SPP.set @Newtypes.FSep @(Newtypes.MQuoted Extension.Extension),
-          "other-languages" =: SPP.set @Newtypes.FSep @(Newtypes.MQuoted Language.Language),
+          "other-languages" =: SPP.set @Newtypes.FSep @(Newtypes.MQuoted Haskell.Language),
           "other-modules" =: SPP.set @Newtypes.VCat @(Newtypes.MQuoted ModuleName.ModuleName),
           "pkgconfig-depends" =: SPP.set @Newtypes.CommaFSep @(Identity.Identity PkgconfigDependency.PkgconfigDependency),
           "reexported-modules" =: SPP.set @Newtypes.CommaVCat @(Identity.Identity ModuleReexport.ModuleReexport),
diff --git a/source/library/CabalGild/Unstable/Extra/CharParsing.hs b/source/library/CabalGild/Unstable/Extra/CharParsing.hs
--- a/source/library/CabalGild/Unstable/Extra/CharParsing.hs
+++ b/source/library/CabalGild/Unstable/Extra/CharParsing.hs
@@ -3,6 +3,10 @@
 import qualified Distribution.Compat.CharParsing as Parse
 import qualified Distribution.Parsec as Parsec
 
+-- | Wraps the given parser in curly braces.
+braces :: (Parsec.CabalParsing m) => m a -> m a
+braces = Parse.between (token "{") (token "}")
+
 -- | Wraps the given parser in parentheses.
 parens :: (Parsec.CabalParsing m) => m a -> m a
 parens = Parse.between (token "(") (token ")")
diff --git a/source/library/CabalGild/Unstable/Type/Dependency.hs b/source/library/CabalGild/Unstable/Type/Dependency.hs
--- a/source/library/CabalGild/Unstable/Type/Dependency.hs
+++ b/source/library/CabalGild/Unstable/Type/Dependency.hs
@@ -1,26 +1,58 @@
+{-# LANGUAGE NamedFieldPuns #-}
+
 module CabalGild.Unstable.Type.Dependency where
 
 import qualified CabalGild.Unstable.Type.VersionRange as VersionRange
-import qualified Data.Ord as Ord
+import qualified Control.Monad as Monad
+import qualified Data.List.NonEmpty as NonEmpty
+import qualified Distribution.CabalSpecVersion as CabalSpecVersion
+import qualified Distribution.Compat.CharParsing as Parse
 import qualified Distribution.Parsec as Parsec
 import qualified Distribution.Pretty as Pretty
-import qualified Distribution.Types.Dependency as Dependency
+import qualified Distribution.Types.PackageName as PackageName
+import qualified Distribution.Types.UnqualComponentName as UnqualComponentName
+import qualified Text.PrettyPrint as PrettyPrint
 
--- | This type exists to provide an 'Ord' instance for
--- 'Dependency.Dependency', which was added in @Cabal-syntax-3.10.1.0@.
-newtype Dependency = Dependency
-  { unwrap :: Dependency.Dependency
+data Dependency = MkDependency
+  { packageName :: PackageName.PackageName,
+    libraryNames :: Maybe (Either UnqualComponentName.UnqualComponentName (NonEmpty.NonEmpty UnqualComponentName.UnqualComponentName)),
+    versionRange :: Maybe VersionRange.VersionRange
   }
-  deriving (Eq, Show)
-
-instance Ord Dependency where
-  compare =
-    Ord.comparing $
-      (\(Dependency.Dependency pn vr lns) -> (pn, VersionRange.fromVersionRange vr, lns))
-        . unwrap
+  deriving (Eq, Ord, Show)
 
 instance Parsec.Parsec Dependency where
-  parsec = Dependency <$> Parsec.parsec
+  parsec = do
+    packageName <- Parsec.parsec
+    libraryNames <- Parse.optional $ do
+      Monad.void $ Parse.char ':'
+      csv <- Parsec.askCabalSpecVersion
+      Monad.guard $ csv >= CabalSpecVersion.CabalSpecV3_0
+      Monad.msum
+        [ Left <$> Parsec.parsec,
+          Right
+            <$> Parse.between
+              (Parse.char '{' *> Parse.spaces)
+              (Parse.spaces <* Parse.char '}')
+              (Parsec.parsecCommaNonEmpty Parsec.parsec)
+        ]
+    Parse.spaces
+    versionRange <- Parse.optional Parsec.parsec
+    pure MkDependency {packageName, libraryNames, versionRange}
 
 instance Pretty.Pretty Dependency where
-  pretty = Pretty.pretty . unwrap
+  pretty dependency =
+    let pkg = Pretty.pretty $ packageName dependency
+        libs = case libraryNames dependency of
+          Nothing -> mempty
+          Just e ->
+            PrettyPrint.char ':' <> case e of
+              Left ucn -> Pretty.pretty ucn
+              Right ucns ->
+                PrettyPrint.braces
+                  . PrettyPrint.hsep
+                  . PrettyPrint.punctuate PrettyPrint.comma
+                  . fmap Pretty.pretty
+                  . NonEmpty.toList
+                  $ NonEmpty.sort ucns
+        ver = foldMap Pretty.pretty $ versionRange dependency
+     in PrettyPrint.hsep [pkg <> libs, ver]
diff --git a/source/library/CabalGild/Unstable/Type/ExeDependency.hs b/source/library/CabalGild/Unstable/Type/ExeDependency.hs
deleted file mode 100644
--- a/source/library/CabalGild/Unstable/Type/ExeDependency.hs
+++ /dev/null
@@ -1,26 +0,0 @@
-module CabalGild.Unstable.Type.ExeDependency where
-
-import qualified CabalGild.Unstable.Type.VersionRange as VersionRange
-import qualified Data.Ord as Ord
-import qualified Distribution.Parsec as Parsec
-import qualified Distribution.Pretty as Pretty
-import qualified Distribution.Types.ExeDependency as ExeDependency
-
--- | This type exists to provide an 'Ord' instance for
--- 'ExeDependency.ExeDependency', which was added in @Cabal-syntax-3.10.1.0@.
-newtype ExeDependency = ExeDependency
-  { unwrap :: ExeDependency.ExeDependency
-  }
-  deriving (Eq, Show)
-
-instance Ord ExeDependency where
-  compare =
-    Ord.comparing $
-      (\(ExeDependency.ExeDependency pn ucn vr) -> (pn, ucn, VersionRange.fromVersionRange vr))
-        . unwrap
-
-instance Parsec.Parsec ExeDependency where
-  parsec = ExeDependency <$> Parsec.parsec
-
-instance Pretty.Pretty ExeDependency where
-  pretty = Pretty.pretty . unwrap
diff --git a/source/library/CabalGild/Unstable/Type/ForeignLibOption.hs b/source/library/CabalGild/Unstable/Type/ForeignLibOption.hs
deleted file mode 100644
--- a/source/library/CabalGild/Unstable/Type/ForeignLibOption.hs
+++ /dev/null
@@ -1,23 +0,0 @@
-module CabalGild.Unstable.Type.ForeignLibOption where
-
-import qualified Data.Ord as Ord
-import qualified Distribution.Parsec as Parsec
-import qualified Distribution.Pretty as Pretty
-import qualified Distribution.Types.ForeignLibOption as ForeignLibOption
-
--- | This type exists to provide an 'Ord' instance for
--- 'ForeignLibOption.ForeignLibOption', which was added in
--- @Cabal-syntax-3.10.1.0@.
-newtype ForeignLibOption = ForeignLibOption
-  { unwrap :: ForeignLibOption.ForeignLibOption
-  }
-  deriving (Eq, Show)
-
-instance Ord ForeignLibOption where
-  compare = Ord.comparing Pretty.prettyShow
-
-instance Parsec.Parsec ForeignLibOption where
-  parsec = ForeignLibOption <$> Parsec.parsec
-
-instance Pretty.Pretty ForeignLibOption where
-  pretty = Pretty.pretty . unwrap
diff --git a/source/library/CabalGild/Unstable/Type/Language.hs b/source/library/CabalGild/Unstable/Type/Language.hs
deleted file mode 100644
--- a/source/library/CabalGild/Unstable/Type/Language.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-module CabalGild.Unstable.Type.Language where
-
-import qualified Data.Ord as Ord
-import qualified Distribution.Parsec as Parsec
-import qualified Distribution.Pretty as Pretty
-import qualified Language.Haskell.Extension as Extension
-
--- | This type exists to provide an 'Ord' instance for
--- 'Language.Language', which was added in @Cabal-syntax-3.10.1.0@.
-newtype Language = Language
-  { unwrap :: Extension.Language
-  }
-  deriving (Eq, Show)
-
-instance Ord Language where
-  compare = Ord.comparing Pretty.prettyShow
-
-instance Parsec.Parsec Language where
-  parsec = Language <$> Parsec.parsec
-
-instance Pretty.Pretty Language where
-  pretty = Pretty.pretty . unwrap
diff --git a/source/library/CabalGild/Unstable/Type/LegacyExeDependency.hs b/source/library/CabalGild/Unstable/Type/LegacyExeDependency.hs
deleted file mode 100644
--- a/source/library/CabalGild/Unstable/Type/LegacyExeDependency.hs
+++ /dev/null
@@ -1,27 +0,0 @@
-module CabalGild.Unstable.Type.LegacyExeDependency where
-
-import qualified CabalGild.Unstable.Type.VersionRange as VersionRange
-import qualified Data.Ord as Ord
-import qualified Distribution.Parsec as Parsec
-import qualified Distribution.Pretty as Pretty
-import qualified Distribution.Types.LegacyExeDependency as LegacyExeDependency
-
--- | This type exists to provide an 'Ord' instance for
--- 'LegacyExeDependency.LegacyExeDependency', which was added in
--- @Cabal-syntax-3.10.1.0@.
-newtype LegacyExeDependency = LegacyExeDependency
-  { unwrap :: LegacyExeDependency.LegacyExeDependency
-  }
-  deriving (Eq, Show)
-
-instance Ord LegacyExeDependency where
-  compare =
-    Ord.comparing $
-      (\(LegacyExeDependency.LegacyExeDependency s vr) -> (s, VersionRange.fromVersionRange vr))
-        . unwrap
-
-instance Parsec.Parsec LegacyExeDependency where
-  parsec = LegacyExeDependency <$> Parsec.parsec
-
-instance Pretty.Pretty LegacyExeDependency where
-  pretty = Pretty.pretty . unwrap
diff --git a/source/library/CabalGild/Unstable/Type/ModuleReexport.hs b/source/library/CabalGild/Unstable/Type/ModuleReexport.hs
deleted file mode 100644
--- a/source/library/CabalGild/Unstable/Type/ModuleReexport.hs
+++ /dev/null
@@ -1,25 +0,0 @@
-module CabalGild.Unstable.Type.ModuleReexport where
-
-import qualified Data.Ord as Ord
-import qualified Distribution.Parsec as Parsec
-import qualified Distribution.Pretty as Pretty
-import qualified Distribution.Types.ModuleReexport as ModuleReexport
-
--- | This type exists to provide an 'Ord' instance for
--- 'ModuleReexport.ModuleReexport', which was added in @Cabal-syntax-3.10.1.0@.
-newtype ModuleReexport = ModuleReexport
-  { unwrap :: ModuleReexport.ModuleReexport
-  }
-  deriving (Eq, Show)
-
-instance Ord ModuleReexport where
-  compare =
-    Ord.comparing $
-      (\(ModuleReexport.ModuleReexport mpn mn1 mn2) -> (mpn, mn1, mn2))
-        . unwrap
-
-instance Parsec.Parsec ModuleReexport where
-  parsec = ModuleReexport <$> Parsec.parsec
-
-instance Pretty.Pretty ModuleReexport where
-  pretty = Pretty.pretty . unwrap
diff --git a/source/library/CabalGild/Unstable/Type/PkgconfigDependency.hs b/source/library/CabalGild/Unstable/Type/PkgconfigDependency.hs
deleted file mode 100644
--- a/source/library/CabalGild/Unstable/Type/PkgconfigDependency.hs
+++ /dev/null
@@ -1,27 +0,0 @@
-module CabalGild.Unstable.Type.PkgconfigDependency where
-
-import qualified CabalGild.Unstable.Type.PkgconfigVersionRange as PkgconfigVersionRange
-import qualified Data.Ord as Ord
-import qualified Distribution.Parsec as Parsec
-import qualified Distribution.Pretty as Pretty
-import qualified Distribution.Types.PkgconfigDependency as PkgconfigDependency
-
--- | This type exists to provide an 'Ord' instance for
--- 'PkgconfigDependency.PkgconfigDependency', which was added in
--- @Cabal-syntax-3.10.1.0@.
-newtype PkgconfigDependency = PkgconfigDependency
-  { unwrap :: PkgconfigDependency.PkgconfigDependency
-  }
-  deriving (Eq, Show)
-
-instance Ord PkgconfigDependency where
-  compare =
-    Ord.comparing $
-      (\(PkgconfigDependency.PkgconfigDependency pn pvr) -> (pn, PkgconfigVersionRange.PkgconfigVersionRange pvr))
-        . unwrap
-
-instance Parsec.Parsec PkgconfigDependency where
-  parsec = PkgconfigDependency <$> Parsec.parsec
-
-instance Pretty.Pretty PkgconfigDependency where
-  pretty = Pretty.pretty . unwrap
diff --git a/source/library/CabalGild/Unstable/Type/PkgconfigVersionRange.hs b/source/library/CabalGild/Unstable/Type/PkgconfigVersionRange.hs
deleted file mode 100644
--- a/source/library/CabalGild/Unstable/Type/PkgconfigVersionRange.hs
+++ /dev/null
@@ -1,27 +0,0 @@
-module CabalGild.Unstable.Type.PkgconfigVersionRange where
-
-import qualified CabalGild.Unstable.Type.VersionRange as VersionRange
-import qualified Data.Ord as Ord
-import qualified Distribution.Parsec as Parsec
-import qualified Distribution.Pretty as Pretty
-import qualified Distribution.Types.PkgconfigVersionRange as PkgconfigVersionRange
-
--- | This type exists to provide an 'Ord' instance for
--- 'PkgconfigVersionRange.PkgconfigVersionRange', which was added in
--- @Cabal-syntax-3.10.1.0@.
-newtype PkgconfigVersionRange = PkgconfigVersionRange
-  { unwrap :: PkgconfigVersionRange.PkgconfigVersionRange
-  }
-  deriving (Eq, Show)
-
-instance Ord PkgconfigVersionRange where
-  compare =
-    Ord.comparing $
-      VersionRange.fromPkgconfigVersionRange
-        . unwrap
-
-instance Parsec.Parsec PkgconfigVersionRange where
-  parsec = PkgconfigVersionRange <$> Parsec.parsec
-
-instance Pretty.Pretty PkgconfigVersionRange where
-  pretty = Pretty.pretty . unwrap
diff --git a/source/library/CabalGild/Unstable/Type/TestedWith.hs b/source/library/CabalGild/Unstable/Type/TestedWith.hs
--- a/source/library/CabalGild/Unstable/Type/TestedWith.hs
+++ b/source/library/CabalGild/Unstable/Type/TestedWith.hs
@@ -1,32 +1,28 @@
 module CabalGild.Unstable.Type.TestedWith where
 
 import qualified CabalGild.Unstable.Type.VersionRange as VersionRange
-import qualified Data.Ord as Ord
-import qualified Distribution.FieldGrammar.Newtypes as Newtypes
+import qualified Distribution.Compat.CharParsing as Parse
+import qualified Distribution.Compiler as Compiler
 import qualified Distribution.Parsec as Parsec
 import qualified Distribution.Pretty as Pretty
+import qualified Text.PrettyPrint as PrettyPrint
 
--- | This type exists to provide an 'Ord' instance for 'Newtypes.TestedWith',
--- which was added in @Cabal-syntax-3.10.1.0@.
-newtype TestedWith = TestedWith
-  { unwrap :: Newtypes.TestedWith
+data TestedWith = MkTestedWith
+  { compilerFlavor :: Compiler.CompilerFlavor,
+    versionRange :: Maybe VersionRange.VersionRange
   }
-
-instance Eq TestedWith where
-  x == y = compare x y == EQ
-
-instance Ord TestedWith where
-  compare =
-    Ord.comparing $
-      fmap VersionRange.fromVersionRange
-        . Newtypes.getTestedWith
-        . unwrap
+  deriving (Eq, Ord, Show)
 
 instance Parsec.Parsec TestedWith where
-  parsec = TestedWith <$> Parsec.parsec
+  parsec =
+    MkTestedWith
+      <$> Parsec.parsec
+      <* Parse.spaces
+      <*> Parse.optional Parsec.parsec
 
 instance Pretty.Pretty TestedWith where
-  pretty = Pretty.pretty . unwrap
-
-instance Show TestedWith where
-  show = show . Newtypes.getTestedWith . unwrap
+  pretty x =
+    PrettyPrint.hsep
+      [ Pretty.pretty $ compilerFlavor x,
+        foldMap Pretty.pretty $ versionRange x
+      ]
diff --git a/source/library/CabalGild/Unstable/Type/Variable.hs b/source/library/CabalGild/Unstable/Type/Variable.hs
--- a/source/library/CabalGild/Unstable/Type/Variable.hs
+++ b/source/library/CabalGild/Unstable/Type/Variable.hs
@@ -1,6 +1,7 @@
 module CabalGild.Unstable.Type.Variable where
 
 import qualified CabalGild.Unstable.Extra.CharParsing as Parse
+import qualified CabalGild.Unstable.Type.VersionRange as VersionRange
 import qualified Data.Char as Char
 import qualified Distribution.Compat.CharParsing as Parse
 import qualified Distribution.Compiler as Compiler
@@ -8,7 +9,6 @@
 import qualified Distribution.Pretty as Pretty
 import qualified Distribution.System as System
 import qualified Distribution.Types.Flag as Flag
-import qualified Distribution.Types.VersionRange as VersionRange
 import qualified Text.PrettyPrint as PrettyPrint
 
 -- | Similar to 'Distribution.Types.ConfVar.ConfVar', but with different
@@ -16,7 +16,7 @@
 data Variable
   = Arch System.Arch
   | Flag Flag.FlagName
-  | Impl Compiler.CompilerFlavor VersionRange.VersionRange
+  | Impl Compiler.CompilerFlavor (Maybe VersionRange.VersionRange)
   | Os System.OS
   deriving (Eq, Show)
 
@@ -41,14 +41,14 @@
 parseFlag = Parse.token "flag" *> Parse.parens (Parsec.parsec <* Parse.spaces)
 
 -- | Parses an 'Impl'.
-parseImpl :: (Parsec.CabalParsing m) => m (Compiler.CompilerFlavor, VersionRange.VersionRange)
+parseImpl :: (Parsec.CabalParsing m) => m (Compiler.CompilerFlavor, Maybe VersionRange.VersionRange)
 parseImpl = do
   Parse.token "impl"
   Parse.parens $
     (,)
       <$> Parsec.parsec
       <* Parse.spaces
-      <*> Parse.option VersionRange.anyVersion Parsec.parsec
+      <*> Parse.optional Parsec.parsec
       <* Parse.spaces
 
 -- | Parses an 'Os'.
@@ -77,7 +77,7 @@
         <> PrettyPrint.parens (Pretty.pretty y)
     Impl y z ->
       PrettyPrint.text "impl"
-        <> PrettyPrint.parens (Pretty.pretty y PrettyPrint.<+> Pretty.pretty z)
+        <> PrettyPrint.parens (Pretty.pretty y PrettyPrint.<+> foldMap Pretty.pretty z)
     Os y ->
       PrettyPrint.text "os"
         <> PrettyPrint.parens (Pretty.pretty y)
diff --git a/source/library/CabalGild/Unstable/Type/VersionRange.hs b/source/library/CabalGild/Unstable/Type/VersionRange.hs
--- a/source/library/CabalGild/Unstable/Type/VersionRange.hs
+++ b/source/library/CabalGild/Unstable/Type/VersionRange.hs
@@ -1,45 +1,182 @@
+{-# LANGUAGE FlexibleInstances #-}
+
 module CabalGild.Unstable.Type.VersionRange where
 
-import qualified Distribution.Types.PkgconfigVersion as PkgconfigVersion
-import qualified Distribution.Types.PkgconfigVersionRange as PkgconfigVersionRange
-import qualified Distribution.Types.Version as Version
-import qualified Distribution.Types.VersionRange as VersionRange
+import qualified CabalGild.Unstable.Extra.CharParsing as Parse
+import qualified Data.List.NonEmpty as NonEmpty
+import qualified Data.Set as Set
+import qualified Distribution.Compat.CharParsing as Parse
+import qualified Distribution.Parsec as Parsec
+import qualified Distribution.Pretty as Pretty
+import qualified Numeric.Natural as Natural
+import qualified Text.PrettyPrint as PrettyPrint
+import qualified Text.Read as Read
 
--- | This type exists to provide an 'Ord' instance for
--- 'VersionRange.VersionRange', which was added in @Cabal-syntax-3.10.1.0@.
-data VersionRange a
+data Part
+  = Numeric Natural.Natural
+  | Wildcard
+  deriving (Eq, Ord, Show)
+
+parseNumeric :: (Parsec.CabalParsing m) => m Natural.Natural
+parseNumeric =
+  Parse.choice
+    [ parseZero,
+      parseNonZero
+    ]
+
+parseZero :: (Parsec.CabalParsing m) => m Natural.Natural
+parseZero = 0 <$ Parse.token "0"
+
+parseNonZero :: (Parsec.CabalParsing m) => m Natural.Natural
+parseNonZero = do
+  c <- Parse.satisfy $ \c -> '1' <= c && c <= '9'
+  cs <- Parse.many Parse.digit
+  let s = c : cs
+  case Read.readMaybe s of
+    Nothing -> fail $ "invalid Natural: " <> show s
+    Just n -> n <$ Parse.spaces
+
+renderNumeric :: Natural.Natural -> PrettyPrint.Doc
+renderNumeric = PrettyPrint.text . show
+
+parseWildcard :: (Parsec.CabalParsing m) => m ()
+parseWildcard = Parse.token "*"
+
+renderWildcard :: PrettyPrint.Doc
+renderWildcard = PrettyPrint.char '*'
+
+parsePart :: (Parsec.CabalParsing m) => m Part
+parsePart =
+  Parse.choice
+    [ Numeric <$> parseNumeric,
+      Wildcard <$ parseWildcard
+    ]
+
+renderPart :: Part -> PrettyPrint.Doc
+renderPart x =
+  case x of
+    Numeric n -> renderNumeric n
+    Wildcard -> renderWildcard
+
+newtype Version
+  = MkVersion (NonEmpty.NonEmpty Part)
+  deriving (Eq, Ord, Show)
+
+parseVersion :: (Parsec.CabalParsing m) => m Version
+parseVersion =
+  MkVersion
+    <$> Parse.sepByNonEmpty parsePart (Parse.char '.')
+    <* Parse.spaces
+
+renderVersion :: Version -> PrettyPrint.Doc
+renderVersion (MkVersion parts) =
+  mconcat
+    . PrettyPrint.punctuate (PrettyPrint.char '.')
+    . fmap renderPart
+    $ NonEmpty.toList parts
+
+data Versions
+  = One Version
+  | Set (Set.Set Version)
+  deriving (Eq, Ord, Show)
+
+parseVersions :: (Parsec.CabalParsing m) => m Versions
+parseVersions =
+  Parse.choice
+    [ One <$> parseVersion,
+      Set . Set.fromList <$> Parse.braces (Parse.sepBy parseVersion $ Parse.token ",")
+    ]
+
+renderVersions :: Versions -> PrettyPrint.Doc
+renderVersions x =
+  case x of
+    One v -> renderVersion v
+    Set vs ->
+      PrettyPrint.braces
+        . PrettyPrint.hsep
+        . PrettyPrint.punctuate PrettyPrint.comma
+        . fmap renderVersion
+        $ Set.toAscList vs
+
+data Operator
+  = Caret
+  | Ge
+  | Gt
+  | Le
+  | Lt
+  | Eq
+  deriving (Eq, Ord, Show)
+
+parseOperator :: (Parsec.CabalParsing m) => m Operator
+parseOperator =
+  Parse.choice
+    [ Caret <$ Parse.token "^>=",
+      Parse.try $ Ge <$ Parse.token ">=",
+      Gt <$ Parse.token ">",
+      Parse.try $ Le <$ Parse.token "<=",
+      Lt <$ Parse.token "<",
+      Eq <$ Parse.token "=="
+    ]
+
+renderOperator :: Operator -> PrettyPrint.Doc
+renderOperator x =
+  case x of
+    Caret -> PrettyPrint.text "^>="
+    Ge -> PrettyPrint.text ">="
+    Gt -> PrettyPrint.char '>'
+    Le -> PrettyPrint.text "<="
+    Lt -> PrettyPrint.char '<'
+    Eq -> PrettyPrint.text "=="
+
+data Simple
   = Any
-  | This a
-  | Later a
-  | Earlier a
-  | Union (VersionRange a) (VersionRange a)
-  | Intersect (VersionRange a) (VersionRange a)
+  | None
+  | Op Operator Versions
   deriving (Eq, Ord, Show)
 
--- | Converts a 'PkgconfigVersionRange.PkgconfigVersionRange' into a
--- 'VersionRange'. Note that the former is more expressive, so things like
--- 'PkgconfigVersionRange.PcOrLaterVersion' will be converted into a 'Union'.
-fromPkgconfigVersionRange ::
-  PkgconfigVersionRange.PkgconfigVersionRange ->
-  VersionRange PkgconfigVersion.PkgconfigVersion
-fromPkgconfigVersionRange x = case x of
-  PkgconfigVersionRange.PcAnyVersion -> Any
-  PkgconfigVersionRange.PcThisVersion v -> This v
-  PkgconfigVersionRange.PcLaterVersion v -> Later v
-  PkgconfigVersionRange.PcEarlierVersion v -> Earlier v
-  PkgconfigVersionRange.PcOrLaterVersion v -> Union (Later v) (This v)
-  PkgconfigVersionRange.PcOrEarlierVersion v -> Union (Earlier v) (This v)
-  PkgconfigVersionRange.PcUnionVersionRanges v w -> Union (fromPkgconfigVersionRange v) (fromPkgconfigVersionRange w)
-  PkgconfigVersionRange.PcIntersectVersionRanges v w -> Intersect (fromPkgconfigVersionRange v) (fromPkgconfigVersionRange w)
+parseSimple :: (Parsec.CabalParsing m) => m Simple
+parseSimple =
+  Parse.choice
+    [ Parse.try $ Any <$ Parse.token "-any",
+      None <$ Parse.token "-none",
+      Op <$> parseOperator <*> parseVersions
+    ]
 
--- | Converts a 'VersionRange.VersionRange' into a 'VersionRange'. These are
--- isomorphic, so no information is lost.
-fromVersionRange :: VersionRange.VersionRange -> VersionRange Version.Version
-fromVersionRange =
-  VersionRange.foldVersionRange
-    Any
-    This
-    Later
-    Earlier
-    Union
-    Intersect
+renderSimple :: Simple -> PrettyPrint.Doc
+renderSimple x =
+  case x of
+    Any -> PrettyPrint.text "-any"
+    None -> PrettyPrint.text "-none"
+    Op o vs -> renderOperator o <> renderVersions vs
+
+data Complex a
+  = Par (Complex a)
+  | And a (Complex a)
+  | Or a (Complex a)
+  | Simple a
+  deriving (Eq, Ord, Show)
+
+parseComplex :: (Parsec.CabalParsing m) => m a -> m (Complex a)
+parseComplex p =
+  Parse.choice
+    [ Par <$> Parse.parens (parseComplex p),
+      Parse.try $ And <$> p <* Parse.token "&&" <*> parseComplex p,
+      Parse.try $ Or <$> p <* Parse.token "||" <*> parseComplex p,
+      Simple <$> p
+    ]
+
+renderComplex :: (a -> PrettyPrint.Doc) -> Complex a -> PrettyPrint.Doc
+renderComplex f x =
+  case x of
+    Par y -> PrettyPrint.parens $ renderComplex f y
+    And l r -> PrettyPrint.hsep [f l, PrettyPrint.text "&&", renderComplex f r]
+    Or l r -> PrettyPrint.hsep [f l, PrettyPrint.text "||", renderComplex f r]
+    Simple y -> f y
+
+type VersionRange = Complex Simple
+
+instance Parsec.Parsec VersionRange where
+  parsec = parseComplex parseSimple
+
+instance Pretty.Pretty VersionRange where
+  pretty = renderComplex renderSimple
diff --git a/source/test-suite/Main.hs b/source/test-suite/Main.hs
--- a/source/test-suite/Main.hs
+++ b/source/test-suite/Main.hs
@@ -635,8 +635,13 @@
     Hspec.it "formats impl without version range" $ do
       expectGilded
         "if impl ( ghc )"
-        "if impl(ghc >=0)\n"
+        "if impl(ghc)\n"
 
+    Hspec.it "formats complex impl version range" $ do
+      expectGilded
+        "if impl ( ghc > 8 && < 9 )"
+        "if impl(ghc >8 && <9)\n"
+
     Hspec.it "formats os" $ do
       expectGilded
         "if os ( osx )"
@@ -737,6 +742,11 @@
       "tested-with: GHC == 9.8.1 , GHC == 9.6.4"
       "tested-with:\n  ghc ==9.6.4\n  ghc ==9.8.1\n"
 
+  Hspec.it "formats complex tested-with version range" $ do
+    expectGilded
+      "tested-with: GHC > 8 && < 9"
+      "tested-with: ghc >8 && <9\n"
+
   Hspec.it "sorts data-files" $ do
     expectGilded
       "data-files: g f"
@@ -1564,6 +1574,92 @@
       (".", [["Setup.hs"], ["source", "Example.hs"]])
       "-- cabal-gild: discover source\nexposed-modules:"
       "-- cabal-gild: discover source\nexposed-modules: Example\n"
+
+  Hspec.it "keeps an explicit sub-library name" $ do
+    expectGilded
+      "cabal-version: 3.0\nbuild-depends: x:x"
+      "cabal-version: 3.0\nbuild-depends: x:x\n"
+
+  Hspec.it "keeps a singleton set of sub-library names" $ do
+    expectGilded
+      "cabal-version: 3.0\nbuild-depends: x:{ x }"
+      "cabal-version: 3.0\nbuild-depends: x:{x}\n"
+
+  Hspec.describe "version ranges" $ do
+    Hspec.it "implicit" $ do
+      expectGilded
+        "build-depends:  x"
+        "build-depends: x\n"
+
+    Hspec.it "any" $ do
+      expectGilded
+        "build-depends: x  -any"
+        "build-depends: x -any\n"
+
+    Hspec.it "none" $ do
+      expectGilded
+        "build-depends: x  -none"
+        "build-depends: x -none\n"
+
+    Hspec.it "this" $ do
+      expectGilded
+        "build-depends: x == 1"
+        "build-depends: x ==1\n"
+
+    Hspec.it "later" $ do
+      expectGilded
+        "build-depends: x > 1"
+        "build-depends: x >1\n"
+
+    Hspec.it "or later" $ do
+      expectGilded
+        "build-depends: x >= 1"
+        "build-depends: x >=1\n"
+
+    Hspec.it "earlier" $ do
+      expectGilded
+        "build-depends: x < 1"
+        "build-depends: x <1\n"
+
+    Hspec.it "or earlier" $ do
+      expectGilded
+        "build-depends: x <= 1"
+        "build-depends: x <=1\n"
+
+    Hspec.it "union" $ do
+      expectGilded
+        "build-depends: x > 1 || < 1"
+        "build-depends: x >1 || <1\n"
+
+    Hspec.it "intersect" $ do
+      expectGilded
+        "build-depends: x > 1 && < 2"
+        "build-depends: x >1 && <2\n"
+
+    Hspec.it "within" $ do
+      expectGilded
+        "build-depends: x == 1.*"
+        "build-depends: x ==1.*\n"
+
+    Hspec.it "major bound" $ do
+      expectGilded
+        "build-depends: x ^>= 1"
+        "build-depends: x ^>=1\n"
+
+    Hspec.it "set" $ do
+      expectGilded
+        "build-depends: x == { 1 , 2 }"
+        "build-depends: x =={1, 2}\n"
+
+    Hspec.it "sorts set" $ do
+      expectGilded
+        "build-depends: x == { 2, 1 }"
+        "build-depends: x =={1, 2}\n"
+
+    Hspec.it "paren" $ do
+      expectGilded
+        "build-depends: x ( == 1 )"
+        "build-depends: x (==1)\n"
 
   Hspec.around_ withTemporaryDirectory
     . Hspec.it "discovers modules on the file system"
