diff --git a/example/Example.hs b/example/Example.hs
--- a/example/Example.hs
+++ b/example/Example.hs
@@ -3,11 +3,11 @@
 
 import Text.Pretty.Simple (pPrint)
 
-import Example.Data (bar)
+import Example.Data (baz)
 
 main :: IO ()
 main = do
-  putStrLn "\nThe following normal \"print\" output:\n"
-  print bar
-  putStrLn "\ngets turned into this (using \"Text.Pretty.Simple.pPrint\"):\n"
-  pPrint bar
+  -- putStrLn "\nThe following normal \"print\" output:\n"
+  -- print bar
+  -- putStrLn "\ngets turned into this (using \"Text.Pretty.Simple.pPrint\"):\n"
+  pPrint baz
diff --git a/pretty-simple.cabal b/pretty-simple.cabal
--- a/pretty-simple.cabal
+++ b/pretty-simple.cabal
@@ -1,5 +1,5 @@
 name:                pretty-simple
-version:             1.0.0.0
+version:             1.0.0.1
 synopsis:            Simple pretty printer for any datatype with a 'Show' instance.
 description:         Please see README.md
 homepage:            https://github.com/cdepillabout/pretty-simple
@@ -28,6 +28,7 @@
                      , Text.Pretty.Simple.Internal.OutputPrinter
   build-depends:       base >= 4.6 && < 5
                      , ansi-terminal
+                     , containers
                      , lens
                      , mono-traversable
                      , mtl
diff --git a/src/Text/Pretty/Simple.hs b/src/Text/Pretty/Simple.hs
--- a/src/Text/Pretty/Simple.hs
+++ b/src/Text/Pretty/Simple.hs
@@ -44,6 +44,7 @@
 #endif
 
 import Control.Monad.IO.Class (MonadIO, liftIO)
+import Data.Foldable (toList)
 import Data.Text.Lazy (Text, pack)
 import Data.Text.Lazy.IO as LText
 
@@ -95,7 +96,7 @@
   case expressionParse string of
     Left _ -> pack string
     Right expressions ->
-      render outputOptions $ expressionsToOutputs expressions
+      render outputOptions . toList $ expressionsToOutputs expressions
 
 -- $examples
 -- Simple Haskell datatype:
diff --git a/src/Text/Pretty/Simple/Internal/ExprToOutput.hs b/src/Text/Pretty/Simple/Internal/ExprToOutput.hs
--- a/src/Text/Pretty/Simple/Internal/ExprToOutput.hs
+++ b/src/Text/Pretty/Simple/Internal/ExprToOutput.hs
@@ -3,6 +3,7 @@
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE OverloadedLists #-}
 {-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE TemplateHaskell #-}
@@ -33,7 +34,8 @@
 import Data.Data (Data)
 import Data.Foldable (traverse_)
 import Data.Monoid ((<>))
-import Data.Sequences (intersperse)
+import Data.Sequence (Seq)
+import Data.Sequences (fromList, intersperse, singleton)
 import Data.Typeable (Typeable)
 import GHC.Generics (Generic)
 
@@ -57,14 +59,14 @@
 makeLenses ''LineNum
 
 data PrinterState = PrinterState
-  { _currLine :: LineNum
-  , _nestLevel :: NestLevel
-  , _outputList :: [Output]
+  { _currLine :: {-# UNPACK #-} !LineNum
+  , _nestLevel :: {-# UNPACK #-} !NestLevel
+  , _outputList :: !(Seq Output)
   } deriving (Eq, Data, Generic, Show, Typeable)
 makeLenses ''PrinterState
 
 -- | Smart-constructor for 'PrinterState'.
-printerState :: LineNum -> NestLevel -> [Output] -> PrinterState
+printerState :: LineNum -> NestLevel -> Seq Output -> PrinterState
 printerState currLineNum nestNum output =
   PrinterState
   { _currLine = currLineNum
@@ -78,11 +80,11 @@
 addOutput outputType = do
   nest <- use nestLevel
   let output = Output nest outputType
-  outputList <>= [output]
+  outputList <>= singleton output
 
 addOutputs
   :: MonadState PrinterState m
-  => [OutputType] -> m ()
+  => Seq OutputType -> m ()
 addOutputs outputTypes = do
   nest <- use nestLevel
   let outputs = Output nest <$> outputTypes
@@ -97,13 +99,13 @@
 -- markers.
 --
 -- >>> testInit $ putSurroundExpr "[" "]" (CommaSeparated [])
--- PrinterState {_currLine = LineNum {unLineNum = 0}, _nestLevel = NestLevel {_unNestLevel = -1}, _outputList = [Output {outputNestLevel = NestLevel {_unNestLevel = 0}, outputOutputType = OutputOpenBracket},Output {outputNestLevel = NestLevel {_unNestLevel = 0}, outputOutputType = OutputCloseBracket}]}
+-- PrinterState {_currLine = LineNum {unLineNum = 0}, _nestLevel = NestLevel {_unNestLevel = -1}, _outputList = fromList [Output {outputNestLevel = NestLevel {_unNestLevel = 0}, outputOutputType = OutputOpenBracket},Output {outputNestLevel = NestLevel {_unNestLevel = 0}, outputOutputType = OutputCloseBracket}]}
 --
 -- If there is only one expression, and it will print out on one line, then
 -- just print everything all on one line, with spaces around the expressions.
 --
 -- >>> testInit $ putSurroundExpr "{" "}" (CommaSeparated [[Other "hello"]])
--- PrinterState {_currLine = LineNum {unLineNum = 0}, _nestLevel = NestLevel {_unNestLevel = -1}, _outputList = [Output {outputNestLevel = NestLevel {_unNestLevel = 0}, outputOutputType = OutputOpenBrace},Output {outputNestLevel = NestLevel {_unNestLevel = 0}, outputOutputType = OutputOther " "},Output {outputNestLevel = NestLevel {_unNestLevel = 0}, outputOutputType = OutputOther "hello"},Output {outputNestLevel = NestLevel {_unNestLevel = 0}, outputOutputType = OutputOther " "},Output {outputNestLevel = NestLevel {_unNestLevel = 0}, outputOutputType = OutputCloseBrace}]}
+-- PrinterState {_currLine = LineNum {unLineNum = 0}, _nestLevel = NestLevel {_unNestLevel = -1}, _outputList = fromList [Output {outputNestLevel = NestLevel {_unNestLevel = 0}, outputOutputType = OutputOpenBrace},Output {outputNestLevel = NestLevel {_unNestLevel = 0}, outputOutputType = OutputOther " "},Output {outputNestLevel = NestLevel {_unNestLevel = 0}, outputOutputType = OutputOther "hello"},Output {outputNestLevel = NestLevel {_unNestLevel = 0}, outputOutputType = OutputOther " "},Output {outputNestLevel = NestLevel {_unNestLevel = 0}, outputOutputType = OutputCloseBrace}]}
 --
 -- If there is only one expression, but it will print out on multiple lines,
 -- then go to newline and print out on multiple lines.
@@ -173,7 +175,7 @@
 doIndent :: MonadState PrinterState m => m ()
 doIndent = do
   nest <- use $ nestLevel . unNestLevel
-  addOutputs $ replicate nest OutputIndent
+  addOutputs . fromList $ replicate nest OutputIndent
 
 newLine
   :: MonadState PrinterState m
@@ -210,7 +212,7 @@
 runInitPrinterState :: [Expr] -> PrinterState
 runInitPrinterState = runPrinterState initPrinterState
 
-expressionsToOutputs :: [Expr] -> [Output]
+expressionsToOutputs :: [Expr] -> Seq Output
 expressionsToOutputs =
   view outputList . runInitPrinterState . modificationsExprList
 
diff --git a/src/Text/Pretty/Simple/Internal/Output.hs b/src/Text/Pretty/Simple/Internal/Output.hs
--- a/src/Text/Pretty/Simple/Internal/Output.hs
+++ b/src/Text/Pretty/Simple/Internal/Output.hs
@@ -92,6 +92,6 @@
 -- | An 'OutputType' token together with a 'NestLevel'.  Basically, each
 -- 'OutputType' keeps track of its own 'NestLevel'.
 data Output = Output
-  { outputNestLevel :: NestLevel
-  , outputOutputType :: OutputType
+  { outputNestLevel :: {-# UNPACK #-} !NestLevel
+  , outputOutputType :: !OutputType
   } deriving (Data, Eq, Generic, Read, Show, Typeable)
