diff --git a/air.cabal b/air.cabal
--- a/air.cabal
+++ b/air.cabal
@@ -1,5 +1,5 @@
 Name:                 air
-Version:              2013.6.22
+Version:              2013.7.18
 Build-type:           Simple
 Synopsis:             air
 Description:          An alternative Haskell Prelude library.
@@ -27,6 +27,7 @@
                 , dlist
                 , mtl
                 , time
+                , text
 
   hs-source-dirs: src/
 
diff --git a/src/Air/Data/Default.hs b/src/Air/Data/Default.hs
--- a/src/Air/Data/Default.hs
+++ b/src/Air/Data/Default.hs
@@ -13,6 +13,10 @@
 import Data.Int (Int8, Int16, Int32, Int64)
 import Data.Word (Word8, Word16, Word32, Word64)
 import Data.Time (Day(..), TimeOfDay, midnight, UTCTime(..), DiffTime, secondsToDiffTime)
+
+import qualified Data.Text as ST
+import qualified Data.Text.Lazy as LT
+
 -- | A class for types with a default value.
 class Default a where
     -- | The default value for this type.
@@ -47,6 +51,12 @@
 
 instance Default L.ByteString where
   def = L.empty
+
+instance Default ST.Text where
+  def = ST.empty
+
+instance Default LT.Text where
+  def = LT.empty
 
 
 instance Default Int8 where def = 0
diff --git a/src/Air/Data/Monoid.hs b/src/Air/Data/Monoid.hs
--- a/src/Air/Data/Monoid.hs
+++ b/src/Air/Data/Monoid.hs
@@ -14,6 +14,9 @@
 import Data.Int (Int8, Int16, Int32, Int64)
 import Data.Word (Word8, Word16, Word32, Word64)
 
+import qualified Data.Text as ST
+import qualified Data.Text.Lazy as LT
+
 class Monoid a where
         mempty  :: a
         -- ^ Identity of 'mappend'
@@ -138,6 +141,16 @@
 instance Monoid (LB.ByteString) where
   mempty = LB.empty
   mappend = LB.append
+
+instance Monoid (LT.Text) where
+  mempty = LT.empty
+  mappend = LT.append
+
+instance Monoid (ST.Text) where
+  mempty = ST.empty
+  mappend = ST.append
+
+
 
 instance (Ord a) => Monoid (Map.Map a b) where
   mempty = Map.empty
diff --git a/src/Air/Light.hs b/src/Air/Light.hs
--- a/src/Air/Light.hs
+++ b/src/Air/Light.hs
@@ -27,7 +27,9 @@
 import qualified Data.ByteString.Char8 as StrictByteString
 import Data.Maybe (listToMaybe)
 
+import Air.Data.Default (def, Default)
 
+
 -- base DSL
 {-# INLINE (.) #-}
 (.) :: a -> (a -> b) -> b
@@ -114,13 +116,15 @@
 cherry_pick :: (Integral i) => [i] -> [a] -> [Maybe a]
 cherry_pick ids xs  = ids.map(\i -> xs.at i)
 
-reduce, reduce' :: (a -> a -> a) -> [a] -> a
-reduce = L.foldl1
-reduce' = L.foldl1'
 
+
 inject, inject' :: (Foldable t) => a -> (a -> b -> a) -> t b -> a
 inject  = flip foldl
 inject' = flip foldl'
+
+reduce, reduce' :: (Default a, Foldable t) => (a -> a -> a) -> t a -> a
+reduce = inject def
+reduce' = inject' def
 
 select, reject :: (a -> Bool) -> [a] -> [a]
 select   = filter
