    {-# LANGUAGE NoMonomorphismRestriction#-}
    -----------------------------------------------------------------------------
    -- |
    -- Module      :  Network.AWS.ArrowUtils
    -- Copyright   :
    -- License     :
    --
    -- Helper functions for working with HXT.  Scraped from <haskell.org>.
    -----------------------------------------------------------------------------

    module Network.AWS.ArrowUtils (
      split, unsplit, atTag, text
    )

    where

    import Control.Arrow
    import Control.Arrow.ArrowTree
    import Text.XML.HXT.Arrow.XmlArrow

    -- misc. functions for working with arrows (and HXT)

    split :: (Arrow a) => a b (b, b)
    split = arr (\x -> (x,x))

    unsplit :: (Arrow a) => (b -> c -> d) -> a (b, c) d
    unsplit = arr . uncurry

    atTag tag = deep (isElem >>> hasName tag)

    text = getChildren >>> getText