    module Data.Text.Util
      ( readInt
      , renderFeed
      ) where

    import Prelude.Compat

    import Data.Text
    import Data.Text.Read

    import qualified Data.XML.Types as XT -- from xml-types
    import qualified Text.XML as XC -- from xml-conduit
    import qualified Data.Text.Lazy as TL

    readInt :: Text -> Maybe Integer
    readInt s =
      case decimal s of
        Right (x, _) -> Just x
        _ -> Nothing

    renderFeed :: (a -> XT.Element) -> a -> Maybe TL.Text
    renderFeed cf f = let e = cf f
                          d = elToDoc e
                      in XC.renderText XC.def <$> d

    -- Ancillaries --

    elToDoc :: XT.Element -> Maybe XC.Document
    elToDoc el = let txd = XT.Document (XC.Prologue [] Nothing []) el []
                     cxd = XC.fromXMLDocument txd
                 in either (const Nothing) Just cxd