diff --git a/benchmark/Main.hs b/benchmark/Main.hs
--- a/benchmark/Main.hs
+++ b/benchmark/Main.hs
@@ -11,37 +11,43 @@
   defaultMain $
   map sampleGroup $
   [("Small Input", smallSample), ("Medium Input", mediumSample), ("Large Input", largeSample)]
-    
+
 sampleGroup :: (String, Sample) -> Benchmark
-sampleGroup (title, sample) =
+sampleGroup (title, (Sample sample)) =
   bench title $ nf sample $
   (A.byteString, mappend, mempty, A.toByteString)
 
-type Sample =
-  forall a. (ByteString -> a, a -> a -> a, a, a -> ByteString) -> ByteString
+newtype Sample =
+  Sample (forall a. (ByteString -> a, a -> a -> a, a, a -> ByteString) -> ByteString)
 
 {-# NOINLINE smallSample #-}
 smallSample :: Sample
-smallSample (fromByteString, (<>), mempty, toByteString) =
-  toByteString $
+smallSample =
+  Sample $
+  \ (fromByteString, (<>), mempty, toByteString) ->
+    toByteString $
     (fromByteString "hello" <> fromByteString "asdf") <>
     fromByteString "fsndfn" <>
     (fromByteString "dfgknfg" <> fromByteString "aaaaaa")
 
 {-# NOINLINE mediumSample #-}
 mediumSample :: Sample
-mediumSample (fromByteString, (<>), mempty, toByteString) =
-  toByteString $
-  foldl' (<>) mempty $ replicate 1000 $
+mediumSample =
+  Sample $
+  \ (fromByteString, (<>), mempty, toByteString) ->
+    toByteString $
+    foldl' (<>) mempty $ replicate 1000 $
     (fromByteString "hello" <> fromByteString "asdf") <>
     fromByteString "fsndfn" <>
     (fromByteString "dfgknfg" <> fromByteString "aaaaaa")
 
 {-# NOINLINE largeSample #-}
 largeSample :: Sample
-largeSample (fromByteString, (<>), mempty, toByteString) =
-  toByteString $
-  foldl' (<>) mempty $ replicate 100000 $
+largeSample =
+  Sample $
+  \ (fromByteString, (<>), mempty, toByteString) ->
+    toByteString $
+    foldl' (<>) mempty $ replicate 100000 $
     (fromByteString "hello" <> fromByteString "asdf") <>
     fromByteString "fsndfn" <>
     (fromByteString "dfgknfg" <> fromByteString "aaaaaa")
diff --git a/bytestring-tree-builder.cabal b/bytestring-tree-builder.cabal
--- a/bytestring-tree-builder.cabal
+++ b/bytestring-tree-builder.cabal
@@ -1,7 +1,7 @@
 name:
   bytestring-tree-builder
 version:
-  0.2.6
+  0.2.7
 category:
   ByteString
 synopsis:
@@ -44,7 +44,7 @@
     library
   ghc-options:
   default-extensions:
-    Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples
+    Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples
   default-language:
     Haskell2010
   other-modules:
@@ -74,7 +74,7 @@
     "-with-rtsopts=-N"
     -funbox-strict-fields
   default-extensions:
-    Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveTraversable, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples
+    Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveTraversable, DeriveGeneric, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples
   default-language:
     Haskell2010
   build-depends:
@@ -97,7 +97,7 @@
   main-is:
     Main.hs
   default-extensions:
-    Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, ImpredicativeTypes, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples
+    Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples
   default-language:
     Haskell2010
   build-depends:
diff --git a/library/ByteString/TreeBuilder.hs b/library/ByteString/TreeBuilder.hs
--- a/library/ByteString/TreeBuilder.hs
+++ b/library/ByteString/TreeBuilder.hs
@@ -12,6 +12,7 @@
   utf8Ord,
   utf8Text,
   utf8LazyText,
+  intercalate,
   -- * Execution
   length,
   toByteString,
@@ -19,7 +20,7 @@
 )
 where
 
-import ByteString.TreeBuilder.Prelude hiding (foldl, foldr, length)
+import ByteString.TreeBuilder.Prelude hiding (foldl, foldr, length, intercalate)
 import qualified ByteString.TreeBuilder.Tree as A
 import qualified ByteString.TreeBuilder.Poker as D
 import qualified ByteString.TreeBuilder.Prelude as F
@@ -148,6 +149,12 @@
 utf8LazyText :: Data.Text.Lazy.Text -> Builder
 utf8LazyText =
   Data.Text.Lazy.foldl' (\builder -> mappend builder . utf8Char) mempty
+
+{-# INLINABLE intercalate #-}
+intercalate :: (Foldable f, Monoid m) => m -> f m -> m
+intercalate incut =
+  fst .
+  foldl' (\(acc, incutFn) x -> (incutFn (mappend x acc), mappend incut)) (mempty, id)
 
 
 -- * Execution
