Haskell简单XML生成给出编译错误

Haskell简单XML生成给出编译错误,haskell,xml-generation,Haskell,Xml Generation,我正在尝试学习使用这个库,但是当我尝试使用这个例子时,我得到了一个编译错误 代码如下: import Text.XML.Generator import Data.ByteString.Lazy as BSL import Prelude as P genXml' :: Xml Doc genXml' = let people = [("Stefan", "32"), ("Judith", "4")] in doc defaultDocInfo $ xelem "peop

我正在尝试学习使用这个库,但是当我尝试使用这个例子时,我得到了一个编译错误

代码如下:

import Text.XML.Generator
import Data.ByteString.Lazy as BSL
import Prelude as P

genXml' :: Xml Doc
genXml' =
  let people = [("Stefan", "32"), ("Judith", "4")]
  in doc defaultDocInfo $
       xelem "people" $
         xelems $ P.map (\(name, age) -> xelem "person" (xattr "age" age <#> xtext name)) people

outputXml :: IO ()
outputXml = BSL.putStr (xrender genXml')
编译器似乎在推断“xrender genXML”需要是“XmlOutput ByteString”类型,xmlgen库中有一个实例。因此,请帮助我理解这个错误的含义,以及如何修复它

如果有帮助的话,我正在使用Ubuntu 12.10、ghc 7.4.2和xmlgen 0.4.0.3中的Haskell平台

编译器似乎在推断“xrender genXML”的类型应该是“XmlOutput ByteString”

否,编译器(通过使用
BSL.putStr
)推断
xrender genXML'
的类型必须是
Data.ByteString.Lazy.ByteString

因为
xrender
的类型是

xrender :: (Renderable r, XmlOutput t) => Xml r -> t
能够用
Data.ByteString.Lazy.ByteString
实例化
t
的必要条件是Lazy
ByteString
XmlOutput
实例

由于有这样一个从
Text.XML.Generator
导出的实例,所以我看到的错误消息的唯一原因是

import Data.ByteString.Lazy as BSL
从与构建库所依据的
xmlgen
不同的包版本导入模块

您能否使用
ghc pkg descripe xmlgen
(其中列出了在依赖项中构建它所依据的
bytestring
版本)和
ghc pkg list bytestring
检查您已安装的
bytestring
版本

编译器似乎在推断“xrender genXML”的类型应该是“XmlOutput ByteString”

否,编译器(通过使用
BSL.putStr
)推断
xrender genXML'
的类型必须是
Data.ByteString.Lazy.ByteString

因为
xrender
的类型是

xrender :: (Renderable r, XmlOutput t) => Xml r -> t
能够用
Data.ByteString.Lazy.ByteString
实例化
t
的必要条件是Lazy
ByteString
XmlOutput
实例

由于有这样一个从
Text.XML.Generator
导出的实例,所以我看到的错误消息的唯一原因是

import Data.ByteString.Lazy as BSL
从与构建库所依据的
xmlgen
不同的包版本导入模块


您能否使用
ghc pkg descripe xmlgen
(其中列出了在依赖项中构建它所依据的
bytestring
版本)和
ghc pkg list bytestring
检查您安装了哪些
bytestring
版本?

感谢您的回复。我的xmlgen是根据bytestring-0.9.2.1构建的,我安装了两个版本的bytestring:bytestring-0.9.2.1和bytestring-0.10.0.1。如果这是一个合适的项目,我想我会在.cabal文件中指定版本,但只是为了学习,我如何告诉编译器在编译此文件时使用特定版本的bytestring?因此,如果没有指定要使用的
bytestring
版本,编译器将使用最新版本。要告诉它使用哪个版本,
ghc-packagebytestring-0.9.2.1 prog
。使用ghc>=7,您不再需要
--make
。感谢您的回复。我的xmlgen是根据bytestring-0.9.2.1构建的,我安装了两个版本的bytestring:bytestring-0.9.2.1和bytestring-0.10.0.1。如果这是一个合适的项目,我想我会在.cabal文件中指定版本,但只是为了学习,我如何告诉编译器在编译此文件时使用特定版本的bytestring?因此,如果没有指定要使用的
bytestring
版本,编译器将使用最新版本。要告诉它使用哪个版本,
ghc-packagebytestring-0.9.2.1 prog
。使用ghc>=7,您不再需要
--make