diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,8 @@
+# 1.5.0.0
+
+* Use `exonProcess` for `intercalate`
+* Add `intercalate1` for `NonEmpty`
+
 # 1.2.0.0
 
 * Add class `ExonExpression`, allowing customization of how interpolated expressions are converted to builders.
diff --git a/exon.cabal b/exon.cabal
--- a/exon.cabal
+++ b/exon.cabal
@@ -1,29 +1,29 @@
 cabal-version: 2.2
 
--- This file has been generated from package.yaml by hpack version 0.35.0.
+-- This file has been generated from package.yaml by hpack version 0.35.2.
 --
 -- see: https://github.com/sol/hpack
 
 name:           exon
-version:        1.4.0.0
-synopsis:       Customizable Quasiquote Interpolation
+version:        1.5.0.0
+synopsis:       Customizable quasiquote interpolation
 description:    See https://hackage.haskell.org/package/exon/docs/Exon.html
 category:       String
-homepage:       https://git.tryp.io/tek/exon
+homepage:       https://github.com/tek/exon#readme
 bug-reports:    https://github.com/tek/exon/issues
 author:         Torsten Schmits
 maintainer:     hackage@tryp.io
-copyright:      2022 Torsten Schmits
+copyright:      2023 Torsten Schmits
 license:        BSD-2-Clause-Patent
 license-file:   LICENSE
 build-type:     Simple
 extra-source-files:
-    changelog.md
     readme.md
+    changelog.md
 
 source-repository head
   type: git
-  location: https://git.tryp.io/tek/exon
+  location: https://github.com/tek/exon
 
 library
   exposed-modules:
@@ -44,80 +44,53 @@
   default-extensions:
       AllowAmbiguousTypes
       ApplicativeDo
-      BangPatterns
-      BinaryLiterals
       BlockArguments
-      ConstraintKinds
       DataKinds
       DefaultSignatures
       DeriveAnyClass
-      DeriveDataTypeable
-      DeriveFoldable
-      DeriveFunctor
-      DeriveGeneric
-      DeriveLift
-      DeriveTraversable
       DerivingStrategies
       DerivingVia
       DisambiguateRecordFields
-      DoAndIfThenElse
       DuplicateRecordFields
-      EmptyCase
-      EmptyDataDecls
-      ExistentialQuantification
-      FlexibleContexts
-      FlexibleInstances
       FunctionalDependencies
       GADTs
-      GeneralizedNewtypeDeriving
-      InstanceSigs
-      KindSignatures
       LambdaCase
       LiberalTypeSynonyms
-      MultiParamTypeClasses
       MultiWayIf
-      NamedFieldPuns
       OverloadedLabels
       OverloadedLists
       OverloadedStrings
       PackageImports
       PartialTypeSignatures
-      PatternGuards
       PatternSynonyms
-      PolyKinds
       QuantifiedConstraints
       QuasiQuotes
-      RankNTypes
       RecordWildCards
       RecursiveDo
       RoleAnnotations
-      ScopedTypeVariables
-      StandaloneDeriving
       TemplateHaskell
-      TupleSections
-      TypeApplications
       TypeFamilies
       TypeFamilyDependencies
-      TypeOperators
-      TypeSynonymInstances
       UndecidableInstances
       UnicodeSyntax
       ViewPatterns
-  ghc-options: -Wall -Wredundant-constraints -Wincomplete-uni-patterns -Wmissing-deriving-strategies -Widentities -Wunused-packages
+      OverloadedRecordDot
+      NoFieldSelectors
+  ghc-options: -Wall -Widentities -Wincomplete-uni-patterns -Wmissing-deriving-strategies -Wredundant-constraints -Wunused-type-patterns -Wunused-packages
   build-depends:
-      base >=4.12 && <5
-    , flatparse ==0.4.*
+      base ==4.*
+    , flatparse >=0.4 && <0.6
     , generics-sop >=0.5.1.1 && <0.6
     , ghc-hs-meta ==0.1.*
-    , incipit-base ==0.5.*
+    , incipit-base >=0.4 && <0.6
     , template-haskell
   mixins:
       base hiding (Prelude)
     , incipit-base (IncipitBase as Prelude)
     , incipit-base hiding (IncipitBase)
-  default-language: Haskell2010
+  default-language: GHC2021
 
-test-suite exon-unit
+test-suite exon-test
   type: exitcode-stdio-1.0
   main-is: Main.hs
   other-modules:
@@ -132,79 +105,52 @@
   default-extensions:
       AllowAmbiguousTypes
       ApplicativeDo
-      BangPatterns
-      BinaryLiterals
       BlockArguments
-      ConstraintKinds
       DataKinds
       DefaultSignatures
       DeriveAnyClass
-      DeriveDataTypeable
-      DeriveFoldable
-      DeriveFunctor
-      DeriveGeneric
-      DeriveLift
-      DeriveTraversable
       DerivingStrategies
       DerivingVia
       DisambiguateRecordFields
-      DoAndIfThenElse
       DuplicateRecordFields
-      EmptyCase
-      EmptyDataDecls
-      ExistentialQuantification
-      FlexibleContexts
-      FlexibleInstances
       FunctionalDependencies
       GADTs
-      GeneralizedNewtypeDeriving
-      InstanceSigs
-      KindSignatures
       LambdaCase
       LiberalTypeSynonyms
-      MultiParamTypeClasses
       MultiWayIf
-      NamedFieldPuns
       OverloadedLabels
       OverloadedLists
       OverloadedStrings
       PackageImports
       PartialTypeSignatures
-      PatternGuards
       PatternSynonyms
-      PolyKinds
       QuantifiedConstraints
       QuasiQuotes
-      RankNTypes
       RecordWildCards
       RecursiveDo
       RoleAnnotations
-      ScopedTypeVariables
-      StandaloneDeriving
       TemplateHaskell
-      TupleSections
-      TypeApplications
       TypeFamilies
       TypeFamilyDependencies
-      TypeOperators
-      TypeSynonymInstances
       UndecidableInstances
       UnicodeSyntax
       ViewPatterns
-  ghc-options: -Wall -Wredundant-constraints -Wincomplete-uni-patterns -Wmissing-deriving-strategies -Widentities -Wunused-packages -threaded -rtsopts -with-rtsopts=-N
+      OverloadedRecordDot
+      NoFieldSelectors
+  ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall -Widentities -Wincomplete-uni-patterns -Wmissing-deriving-strategies -Wredundant-constraints -Wunused-type-patterns -Wunused-packages
   build-depends:
-      base >=4.12 && <5
+      base ==4.*
     , exon
-    , hedgehog
-    , incipit-base ==0.5.*
-    , tasty
-    , tasty-hedgehog
+    , hedgehog >=1.1 && <1.3
+    , incipit-base >=0.4 && <0.6
+    , tasty ==1.4.*
+    , tasty-hedgehog >=1.3 && <1.5
     , template-haskell
   mixins:
       base hiding (Prelude)
     , incipit-base (IncipitBase as Prelude)
     , incipit-base hiding (IncipitBase)
-  default-language: Haskell2010
+  default-language: GHC2021
 
 benchmark exon-bench
   type: exitcode-stdio-1.0
@@ -214,73 +160,46 @@
   default-extensions:
       AllowAmbiguousTypes
       ApplicativeDo
-      BangPatterns
-      BinaryLiterals
       BlockArguments
-      ConstraintKinds
       DataKinds
       DefaultSignatures
       DeriveAnyClass
-      DeriveDataTypeable
-      DeriveFoldable
-      DeriveFunctor
-      DeriveGeneric
-      DeriveLift
-      DeriveTraversable
       DerivingStrategies
       DerivingVia
       DisambiguateRecordFields
-      DoAndIfThenElse
       DuplicateRecordFields
-      EmptyCase
-      EmptyDataDecls
-      ExistentialQuantification
-      FlexibleContexts
-      FlexibleInstances
       FunctionalDependencies
       GADTs
-      GeneralizedNewtypeDeriving
-      InstanceSigs
-      KindSignatures
       LambdaCase
       LiberalTypeSynonyms
-      MultiParamTypeClasses
       MultiWayIf
-      NamedFieldPuns
       OverloadedLabels
       OverloadedLists
       OverloadedStrings
       PackageImports
       PartialTypeSignatures
-      PatternGuards
       PatternSynonyms
-      PolyKinds
       QuantifiedConstraints
       QuasiQuotes
-      RankNTypes
       RecordWildCards
       RecursiveDo
       RoleAnnotations
-      ScopedTypeVariables
-      StandaloneDeriving
       TemplateHaskell
-      TupleSections
-      TypeApplications
       TypeFamilies
       TypeFamilyDependencies
-      TypeOperators
-      TypeSynonymInstances
       UndecidableInstances
       UnicodeSyntax
       ViewPatterns
-  ghc-options: -Wall -Wredundant-constraints -Wincomplete-uni-patterns -Wmissing-deriving-strategies -Widentities -Wunused-packages
+      OverloadedRecordDot
+      NoFieldSelectors
+  ghc-options: -Wall -Widentities -Wincomplete-uni-patterns -Wmissing-deriving-strategies -Wredundant-constraints -Wunused-type-patterns -Wunused-packages
   build-depends:
-      base >=4.12 && <5
+      base ==4.*
     , criterion
     , exon
-    , incipit-base ==0.5.*
+    , incipit-base >=0.4 && <0.6
   mixins:
       base hiding (Prelude)
     , incipit-base (IncipitBase as Prelude)
     , incipit-base hiding (IncipitBase)
-  default-language: Haskell2010
+  default-language: GHC2021
diff --git a/lib/Exon.hs b/lib/Exon.hs
--- a/lib/Exon.hs
+++ b/lib/Exon.hs
@@ -52,7 +52,7 @@
   ExonUse (..),
   )
 import Exon.Class.ToSegment (ToSegment (..))
-import Exon.Combinators (intercalate)
+import Exon.Combinators (intercalate, intercalate1, intercalateMay)
 import Exon.Data.Result (Result (..))
 import Exon.Data.Segment (Segment (..))
 import Exon.Quote (exon, exonWith, exonws, exun)
diff --git a/lib/Exon/Class/Exon.hs b/lib/Exon/Class/Exon.hs
--- a/lib/Exon/Class/Exon.hs
+++ b/lib/Exon/Class/Exon.hs
@@ -15,9 +15,12 @@
 --
 -- @since 1.0.0.0
 newtype ExonUse a =
-  ExonUse { exonUse :: a }
+  ExonUse a
   deriving stock (Eq, Show)
   deriving newtype (IsString)
+
+exonUse :: ExonUse a -> a
+exonUse = coerce
 
 -- |This class converts a segment into a builder.
 --
diff --git a/lib/Exon/Combinators.hs b/lib/Exon/Combinators.hs
--- a/lib/Exon/Combinators.hs
+++ b/lib/Exon/Combinators.hs
@@ -1,19 +1,43 @@
 -- |Description: Internal
 module Exon.Combinators where
 
-import Prelude hiding (intercalate)
+import qualified Data.List.NonEmpty as NonEmpty
+import Prelude hiding (intersperse)
 
--- |Monoidally combine all elements in the list, appending the separator between each pair of elements.
+import Exon.Class.Exon (Exon (exonProcess))
+import qualified Exon.Data.Segment as Segment
+
+-- | Combine the elements in the list using 'Exon', interspersing the separator between each pair of elements.
+intercalate1 ::
+  Exon a =>
+  a ->
+  NonEmpty a ->
+  a
+intercalate1 sep ta =
+  exonProcess (Segment.Expression <$> NonEmpty.intersperse sep ta)
+
+-- | Combine the elements in the list using 'Exon', interspersing the separator between each pair of elements.
+--
+-- Returns 'Nothing' when the list is empty.
+intercalateMay ::
+  Exon a =>
+  Foldable t =>
+  a ->
+  t a ->
+  Maybe a
+intercalateMay sep ta =
+  intercalate1 sep <$> nonEmpty (toList ta)
+
+-- | Combine the elements in the list using 'Exon', interspersing the separator between each pair of elements.
+--
+-- Returns 'mempty' for empty lists; use 'intercalate1' for 'NonEmpty' or 'intercalateMay' to avoid the 'Monoid'
+-- requirement.
 intercalate ::
+  Exon a =>
   Monoid a =>
   Foldable t =>
   a ->
   t a ->
   a
-intercalate sep =
-  fold . foldl' f Nothing
-  where
-    f Nothing a =
-      Just a
-    f (Just z) a =
-      Just (z <> sep <> a)
+intercalate sep ta =
+  fromMaybe mempty (intercalateMay sep ta)
