Can';编译haskell编码库。不能';找不到HaXml模块

Can';编译haskell编码库。不能';找不到HaXml模块,haskell,haskell-stack,Haskell,Haskell Stack,我需要一个库来编码cp1251中的数据,以使用它的api 为此,我只找到了2个LIB。自由党和自由党。第一个看起来更好,因为它可以静态链接到我的程序 但我甚至不能编译它!我正在使用堆栈,因此我添加了编码以在.cabal文件中构建DEP,然后堆栈解算器在额外的DEP中使用编码-0.8更新我的堆栈yaml文件 但是在运行堆栈构建之后我遇到了一个错误 Data/Encoding/Preprocessor/XMLMapping.hs:11:8: Could not find module ‘Te

我需要一个库来编码cp1251中的数据,以使用它的api

为此,我只找到了2个LIB。自由党和自由党。第一个看起来更好,因为它可以静态链接到我的程序

但我甚至不能编译它!我正在使用堆栈,因此我添加了
编码
以在.cabal文件中构建DEP,然后堆栈解算器在额外的DEP中使用编码-0.8更新我的堆栈yaml文件

但是在运行
堆栈构建之后
我遇到了一个错误

Data/Encoding/Preprocessor/XMLMapping.hs:11:8:
    Could not find module ‘Text.XML.HaXml.Types’
    Use -v to see a list of the files searched for.

Data/Encoding/Preprocessor/XMLMappingBuilder.hs:15:8:
    Could not find module ‘Text.XML.HaXml.OneOfN’
    Use -v to see a list of the files searched for.

Data/Encoding/Preprocessor/XMLMappingBuilder.hs:16:8:
    Could not find module ‘Text.XML.HaXml.XmlContent’
    Use -v to see a list of the files searched for.
我尝试使用旧版本的HaXml和编码,但得到了相同的错误。 例如,在阅读changelog之后,我尝试将
编码-0.6.7
HaXml-1.22.3
一起使用,但得到了相同的错误。 在黑客文档中,所有这些编码无法导入的模块都存在

如何编译这个库?我正在linux mint x64上使用stack 1.0.4、lts-5.6和ghc-7.10.3

stack.yaml

flags: {}
extra-package-dbs: []
packages:
- '.'
extra-deps:
- encoding-0.8
- text-1.2.2.0
resolver: lts-5.6
阴谋集团:

name:                hapidry
version:             0.1.1.0
synopsis:            Initial project template from stack
description:         Please see README.md
homepage:            -
license:             GPL-2
license-file:        LICENSE
author:              -
maintainer:          -
copyright:           GPL
category:            network
build-type:          Simple
-- extra-source-files:
cabal-version:       >=1.10

library
  hs-source-dirs:      src
  exposed-modules:     Lib
  build-depends:       base >= 4.7 && < 5
  default-language:    Haskell2010

executable hapidry-exe
  hs-source-dirs:      app
  main-is:             Main.hs
  ghc-options:         -threaded -rtsopts -with-rtsopts=-N
  build-depends:       base
                     , hapidry
                     , wreq
                     , ConfigFile
                     , aeson
                     , lens
                     , cryptohash
                     , binary
                     , mtl
                     , base16-bytestring
                     , bytestring
                     , containers
                     , text
                     , lens-aeson
                     , data-default
                     , optparse-applicative
                     , encoding
  default-language:    Haskell2010

test-suite hapidry-test
  type:                exitcode-stdio-1.0
  hs-source-dirs:      test
  main-is:             Spec.hs
  build-depends:       base
                     , hapidry
  ghc-options:         -threaded -rtsopts -with-rtsopts=-N
  default-language:    Haskell2010

source-repository head
  type:     git
  location: -
名称:hapidry
版本:0.1.1.0
简介:来自堆栈的初始项目模板
描述:请参阅README.md
主页:-
许可证:GPL-2
许可证文件:许可证
作者:-
维护者:-
版权所有:GPL
类别:网络
构建类型:简单
--额外源文件:
阴谋集团版本:>=1.10
图书馆
hs源目录:src
公开模块:Lib
构建取决于:基础>=4.7&<5
默认语言:Haskell 2010
可执行hapidry exe
hs源目录:应用程序
main是:main.hs
ghc选项:-threaded-rtsopts-with-rtsopts=-N
构建取决于:基础
,hapidry
,鹪鹩
,配置文件
,伊森
,镜头
,cryptohash
,二进制
,mtl
,base16 bytestring
,bytestring
,货柜
,文本
,镜头埃森
,数据默认值
,optpass应用程序
,编码
默认语言:Haskell 2010
测试套件hapidry测试
类型:exitcode-stdio-1.0
hs源目录:测试
主要是:规格hs
构建取决于:基础
,hapidry
ghc选项:-threaded-rtsopts-with-rtsopts=-N
默认语言:Haskell 2010
源存储库负责人
类型:git
地点:-

最后,我编写了自己的编码函数。这似乎是可以接受的解决办法。另一个单字节编码的函数也可以用同样的方式实现

toCP1251 :: Text -> B.ByteString
toCP1251 = B.pack . T.unpack . T.map replace where
  replace l = case (Map.lookup l table) of
      (Just x) -> x
      (Nothing) -> l

  table = Map.fromList $ zip rus cpCodes
  cpCodes = map toEnum (168:184:[192 .. 255]) :: [Char]
  rus =  ['Ё', 'ё', 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М',
         'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы',
         'Ь', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'ж', 'з', 'и', 'й', 'к',
         'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ',
         'ъ', 'ы', 'ь', 'э', 'ю', 'я']  :: [Char]

最后,我编写了自己的编码函数。这似乎是可以接受的解决办法。另一个单字节编码的函数也可以用同样的方式实现

toCP1251 :: Text -> B.ByteString
toCP1251 = B.pack . T.unpack . T.map replace where
  replace l = case (Map.lookup l table) of
      (Just x) -> x
      (Nothing) -> l

  table = Map.fromList $ zip rus cpCodes
  cpCodes = map toEnum (168:184:[192 .. 255]) :: [Char]
  rus =  ['Ё', 'ё', 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М',
         'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы',
         'Ь', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'ж', 'з', 'и', 'й', 'к',
         'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ',
         'ъ', 'ы', 'ь', 'э', 'ю', 'я']  :: [Char]

能否提供您的
cabal
文件和
stack.yaml
fileYes。我已经将它们添加到问题中。我曾经复制过错误-然后尝试单独安装编码(注意:这需要很长时间才能构建),然后尝试将所有库添加到lib部分(这似乎合理),然后构建,在将依赖项移回应用程序部分后,它将继续构建-因此现在我无法重现您的错误谢谢您的帮助!我复制了它,甚至在新的虚拟机创建Special为此(最后,我编写了我自己的转换为cp1251的函数,比我预期的要简单得多。你能添加这个作为答案吗?你能提供你的
cabal
文件和
stack.yaml
文件吗?是的。我已经将它们添加到问题中。我曾经复制过错误,然后尝试单独安装编码(注意:这需要花费很长时间来构建),然后尝试将所有库添加到lib部分(这似乎是合理的),然后进行构建,在将依赖项移回app部分后,它继续构建-因此现在我无法复制您的错误感谢您的帮助!我甚至在为此创建的新vm中复制了它(最后,我编写了自己的转换为cp1251的函数,比我预期的要简单得多。你能添加这个作为答案吗?