@@ -18,22 +18,23 @@ module Text.XML.DOM.Parser.Class
18 , unitFromDom
18 , unitFromDom
19 , voidFromDom
19 , voidFromDom
20 , scientificFromDom
20 , scientificFromDom
23−import Control.Applicative
25+import Control.Applicative
24−import Control.Lens
26+import Control.Lens
25−import Data.Fixed
27+import Data.Fixed
26−import Data.Monoid
28+import Data.Monoid
27−import Data.OpenUnion
29+import Data.OpenUnion
28−import Data.Scientific
30+import Data.Scientific
29−import Data.Text (Text)
30−import qualified Data.Text as T
31+import Data.Text as T hiding (empty)
31−import Data.Typeable
32+import Data.Typeable
32−import Data.Void
33+import Data.Void
33−import Text.XML
34+import Text.XML
34−import Text.XML.DOM.Parser.Combinators
35+import Text.XML.DOM.Parser.Combinators
35−import Text.XML.DOM.Parser.Types
36+import Text.XML.DOM.Parser.Types
36−import TypeFun.Data.List hiding (Union)
37+import TypeFun.Data.List hiding (Union)
38proxyFromDom
39proxyFromDom
39 :: forall proxy m a
40 :: forall proxy m a
@@ -162,3 +163,27 @@ unitFromDom = pure ()
162-- | Never parses successfully. It is just 'mzero'
163-- | Never parses successfully. It is just 'mzero'
163voidFromDom :: (Monad m) => DomParserT Identity m Void
164voidFromDom :: (Monad m) => DomParserT Identity m Void
164voidFromDom = empty
165voidFromDom = empty
167+class FromAttribute a where
168+ fromAttribute :: Text -> Either Text a
170+instance FromAttribute () where
171+ fromAttribute _ = Right ()
173+instance FromAttribute Text where
174+ fromAttribute = Right
176+instance FromAttribute Char where
177+ fromAttribute = readChar
179+instance FromAttribute Int where
180+ fromAttribute = readContent
182+instance FromAttribute Integer where
183+ fromAttribute = readContent
185+instance (Typeable a, HasResolution a) => FromAttribute (Fixed a) where
186+ fromAttribute = readContent
188+instance FromAttribute Scientific where
189+ fromAttribute = readContent