{-# language MagicHash #-} module XML (module XML, module X) where import Xeno.DOM as X import Xeno.Types as X import Data.Function as X ((&)) import Data.List as X (find) import qualified Data.Map as Map import Data.Map (Map, (!)) import Data.ByteString (ByteString) import qualified Data.ByteString.Char8 as BS class XML a where fromXML :: Node -> a toXML :: a -> String just# :: Maybe a -> a just# = \case Just a -> a; _ -> error "just# Nothing" find# n x = fromXML . just# $ x & find \ a -> name a == n find' n x = fmap fromXML $ x & filter \ a -> name a == n pattern XML :: ByteString -> Map ByteString ByteString -> [Node] -> Node pattern XML {xml_name, xml_attributes , xml_children} <- ((\n -> (name n , Map.fromList $ attributes n , children n)) -> (xml_name,xml_attributes,xml_children)) readBS :: Read a => ByteString -> a readBS = read . BS.unpack