diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,6 @@
+0.6.2 (2021)
+  * Add more string-like instances.
+
 0.6.1 (2021)
   * Add classy optics.
 
diff --git a/src/Text/XML/XSD/DateTime.hs b/src/Text/XML/XSD/DateTime.hs
--- a/src/Text/XML/XSD/DateTime.hs
+++ b/src/Text/XML/XSD/DateTime.hs
@@ -4,6 +4,7 @@
 {-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE DefaultSignatures #-}
+{-# LANGUAGE FlexibleInstances #-}
 
 -- | XSD @dateTime@ data structure <http://www.w3.org/TR/xmlschema-2/#dateTime>
 module Text.XML.XSD.DateTime
@@ -20,22 +21,34 @@
 import Control.Applicative (pure, (<$>), (*>), (<|>))
 import Control.Monad (Monad(..), when)
 import Control.Lens
+    ( view,
+      iso,
+      prism',
+      review,
+      Iso',
+      Lens',
+      Prism',
+      Traversal',
+      Traversal1' )
 import Data.Bool ( Bool(False, True), (&&), (||) )
-import Data.Char (ord)
+import Data.Char (Char, ord)
 import Data.Either(Either(..), either)
 import Data.Eq ( Eq(..) )
 import Data.Fixed (Pico, showFixed)
 import Data.Function((.), id, ($), const)
+import Data.Functor((<$))
 import Data.Functor.Apply(WrappedApplicative(WrapApplicative, unwrapApplicative))
 import Data.Int ( Int )
 import Data.Maybe (Maybe(Nothing, Just))
 import Data.Ord ( Ord((>), (<)) )
 import Data.Text(Text)
-import Data.Text.Lazy as TL(toStrict)
+import qualified Data.Text.Lazy as TL(Text, toStrict)
 import Data.Text.Lazy.Builder(Builder, toLazyText, fromString)
 import Data.Text.Lazy.Builder.Int (decimal)
+import Data.Text.Lens ( unpacked, IsText(packed) )
 import qualified Data.Text.Read as TR(decimal)
 import Data.Semigroup ((<>))
+import Data.String(String)
 import Data.Time
     ( addDays,
       fromGregorian,
@@ -267,7 +280,7 @@
           DateTime
           -> Text
         toText =
-          toStrict . toLazyText . dtBuilder
+          TL.toStrict . toLazyText . dtBuilder
             where
               dtBuilder (DtZoned uTime) = ltBuilder (utcToLocalTime utc uTime) <> "Z"
               dtBuilder (DtUnzoned lTime) = ltBuilder lTime
@@ -286,6 +299,22 @@
                     <> buildSeconds sss
     in prism' toText (either (const Nothing) Just . parse (parseDateTime <|> fail "bad date time") "DateTime")
 
+instance ManyDateTime TL.Text where
+  _DateTime_ =
+    _DateTime
+
+instance AsDateTime TL.Text where
+  _DateTime =
+    unpacked . (packed :: Iso' String Text) . _DateTime
+
+instance ManyDateTime [Char] where
+  _DateTime_ =
+    _DateTime
+
+instance AsDateTime [Char] where
+  _DateTime =
+    (packed :: Iso' String Text) . _DateTime
+
 buildSeconds ::
   Pico
   -> Builder
@@ -323,11 +352,11 @@
   (Monad p, CharParsing p) =>
   p (Maybe Pico)
 parseOffset =
-  (eof *> pure Nothing)
+  (Nothing <$ eof)
   <|>
-  (char 'Z' *> pure (Just 0))
+  (Just 0 <$ char 'Z')
    <|>
-  (do sign <- (char '+' *> pure 1) <|> (char '-' *> pure (-1))
+  (do sign <- (1 <$ char '+') <|> ((-1) <$ char '-')
       hh <- fromIntegral <$> p2imax 14
       _ <- char ':'
       mm <- fromIntegral <$> p2imax (if hh == 14 then 0 else 59)
@@ -345,7 +374,7 @@
         c == x
       lengthGT4_c1 _  _ =
         False
-  in  do  sign <- (char '-' *> pure (-1)) <|> pure 1
+  in  do  sign <- ((-1) <$ char '-') <|> pure 1
           ds <- many digit
           when (lengthLT4 ds)
             $ fail "need at least four digits in year"
diff --git a/xsd.cabal b/xsd.cabal
--- a/xsd.cabal
+++ b/xsd.cabal
@@ -1,5 +1,5 @@
 name:                 xsd
-version:              0.6.1
+version:              0.6.2
 license:              BSD3
 license-file:         LICENCE
 author:               Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ>
