Hexpat: GeneriXMLString instances not recognized?

Hi list, I'm trying to use Hexpat to efficiently SAX-parse an XML document (of quite some size.) So I figured it'd be a good idea to use Data.Text as the string type for my parsed XML data. It seems Hexpat's sax-parse function only accepts files in ByteString format, which is fair enough, but here's the really weird thing: the following line yields a compilation error!
import Text.XML.Expat.SAX import qualified Data.Text as T import qualified Data.ByteString.Lazy as L main = do f <- L.readFile someFile let x = parse defaultParseOptions f :: [SAXEvent T.Text T.Text] ...
The error: No instance for (GenericXMLString T.Text) arising from a use of `parse' at Polyparse.hs:15:12-38 Possible fix: add an instance declaration for (GenericXMLString T.Text) In the expression: parse defaultParseOptions f :: [SAXEvent T.Text T.Text] That's mighty strange, seeing as there is an instance for GenericXMLString Data.Text.Text in hexpat's source code (indeed, it's one of its advertised features!) Here is the documentation (as well as the source: http://hackage.haskell.org/packages/archive/hexpat/0.19.4/doc/html/Text-XML-... I went ahead and tried copying the instance declaration from the source to my own code. I noticed it didn't compile, since the type signature of peekByteStringLen (called from the Text instance declaration for GenericXMLString) clashed with the function's use of ByteString.Internal.ByteString (the type signature specified whatever ByteString Data.ByteString exports.) Now my question is twofold: what am I overlooking? Why didn't it compile? I can install and compile the very same code easily via cabal, but it doesn't compile inside my program. Is there some magic at work that I missed? Secondly, why doesn't ghc recognize the instance declaration GenericXMLString Data.Text.Text, when it really should? (It does recognize the declaration for String!) Thanks for any pointers! Aleks
participants (1)
-
Aleksandar Dimitrov