Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
没有重载字符串的Haskell xml管道?_Xml_Haskell_Xml Conduit - Fatal编程技术网

没有重载字符串的Haskell xml管道?

没有重载字符串的Haskell xml管道?,xml,haskell,xml-conduit,Xml,Haskell,Xml Conduit,我在网上看到的Haskell的xml导管模块的每个示例都使用重载字符串GHC扩展,例如。我假设这是因为Text.XML.Cursor.element函数的类型为Name->Axis。例如,如果没有重载字符串,此代码段将无法工作: {-# LANGUAGE OverloadedStrings #-} import Text.XML import Text.XML.Cursor import Data.Text (Text) import Data.Text.Read (decimal) impor

我在网上看到的Haskell的xml导管模块的每个示例都使用重载字符串GHC扩展,例如。我假设这是因为Text.XML.Cursor.element函数的类型为Name->Axis。例如,如果没有重载字符串,此代码段将无法工作:

{-# LANGUAGE OverloadedStrings #-}
import Text.XML
import Text.XML.Cursor
import Data.Text (Text)
import Data.Text.Read (decimal)
import Data.Monoid (mconcat)

main :: IO ()
main = do
    doc <- Text.XML.readFile def "people2.xml"
    let cursor = fromDocument doc
    print $ cursor $// element "{http://example.com}person" >=> parsePerson

data Person = Person Int Text
        deriving Show

parsePerson :: Cursor -> [Person]
parsePerson c = do
    let name = c $/ element "{http://example.com}firstname" &/ content
        ageText = c $/ element "{http://example.com}age" &/ content
    case decimal $ mconcat ageText of
        Right (age, "") -> [Person age $ mconcat name]
        _ -> []

但是,我想编写一个更可移植的模块,即不使用此扩展。这样做的最佳方式是什么?在将结果传递给元素之前,我是否注定要使用Data.Text.pack从每个字符串创建一个文本值,然后使用Text.XML.Name数据构造函数?或者有更简单的方法吗?

恐怕更简单的方法是-XOverloadedStrings。我还担心,在依赖xml管道的情况下,您将无法实现可移植性目标,因为它自由地使用了语言扩展本身


除非您有一个特定的替代编译器,否则最好使用-xOverloadedString,特别是因为xml管道是显式设计来支持它的。

恐怕更简单的方法是-xOverloadedString。我还担心,在依赖xml管道的情况下,您将无法实现可移植性目标,因为它自由地使用了语言扩展本身


除非您有一个特定的替代编译器,否则您最好使用-XoverLoadedString,特别是因为xml管道是显式设计来支持它的。

让人欣慰的是,OverloadedStrings显然是正确的扩展之一,并且应该从语言标准开始。让人欣慰的是,OverloadedStrings显然是正确的扩展之一而且应该从语言标准开始。