diff --git a/library/Text/Builder.hs b/library/Text/Builder.hs
--- a/library/Text/Builder.hs
+++ b/library/Text/Builder.hs
@@ -185,10 +185,12 @@
 
 {-# INLINE intercalate #-}
 intercalate :: Foldable foldable => Builder -> foldable Builder -> Builder
-intercalate separator = foldl' step mempty where
-  step builder element = if null builder
-    then element
-    else builder <> separator <> element
+intercalate separator = extract . foldl' step init where
+  init = Product2 False mempty
+  step (Product2 isNotFirst builder) element = Product2 True $ if isNotFirst
+    then builder <> separator <> element
+    else element
+  extract (Product2 _ builder) = builder
 
 run :: Builder -> Text
 run (Builder (Action action) size) =
diff --git a/library/Text/Builder/Prelude.hs b/library/Text/Builder/Prelude.hs
--- a/library/Text/Builder/Prelude.hs
+++ b/library/Text/Builder/Prelude.hs
@@ -1,6 +1,7 @@
 module Text.Builder.Prelude
 ( 
   module Exports,
+  Product2(..),
 )
 where
 
@@ -20,3 +21,5 @@
 -- text
 -------------------------
 import Data.Text as Exports (Text)
+
+data Product2 a b = Product2 !a !b
diff --git a/text-builder.cabal b/text-builder.cabal
--- a/text-builder.cabal
+++ b/text-builder.cabal
@@ -1,5 +1,5 @@
 name: text-builder
-version: 0.5.3
+version: 0.5.3.1
 category: Text
 synopsis: An efficient strict text builder
 homepage: https://github.com/nikita-volkov/text-builder
@@ -22,7 +22,7 @@
     Text.Builder.UTF16
     Text.Builder.Prelude
   build-depends:
-    base >=4.6 && <5,
+    base >=4.9 && <5,
     base-prelude <2,
     bytestring >=0.10 && <0.11,
     semigroups >=0.18 && <0.19,
