将我的简单 Yesod 应用程序部署到 Heroku cabal 时,在安装 Shakespeare-js-1.0.2 时失败Building shakespeare-js-1.0.2...Building persistent-1.0.2.2...Building yaml-0.8.2.1...Building tls-extra-0.6.1...Failed to install shakespeare-js-1.0.2Last 10 lines of the build log ( /app//.cabal/logs/shakespeare-js-1.0.2.log ):Building shakespeare-js-1.0.2...Preprocessing library shakespeare-js-1.0.2...[1 of 3] Compiling Text.Julius ( Text/Julius.hs, dist/build/Text/Julius.o )[2 of 3] Compiling Text.Coffee ( Text/Coffee.hs, dist/build/Text/Coffee.o )Text/Coffee.hs:56:7:`preEscapeBegin' is not a (visible) field of constructor `PreConvert'Text/Coffee.hs:57:7:`preEscapeEnd' is not a (visible) field of constructor `PreConvert'该项目是一个简单的网站,它使用 WAI 和 Warp 来打印一个 hello world。在我的 cabal 文件中,我只指定了最新版本的 yesod (1.1.9) 以查看它是否在 Heroku 上可用(它还没有使用 Yesod 或 Shakespeare-js):executable Website extensions:NoImplicitPrelude TemplateHaskell QuasiQuotes OverloadedStrings CPP MultiParamTypeClasses TypeFamilies GADTs GeneralizedNewtypeDeriving FlexibleContexts EmptyDataDecls NoMonomorphismRestriction main-is: source/Main.hs -- other-modules: build-depends: base == 4.5.* , http-types , template-haskell , wai , wai-extra , warp , yesod == 1.1.9该项目使用类似的堆栈在我的 VM 上本地构建和运行,其中包括 Shakespeare-js-1.0.2。我尝试了以下方法: 在 .cabal 文件中强制使用比 1.0.2 以外的更新或旧版本的莎士比亚-js。出现相同的编译错误。 作为在黑暗中的一个镜头,我尝试从 .cabal 文件中删除一些可能影响编译的扩展,例如 TemplateHaskell。 编辑: 当我使用 Shakespeare-js 我无法让 Shakespeare-js-1.1.2(最新版本)在任何地方编译,甚至不能在本地编译。 我通过强制莎士比亚 这并不能解决无法编译最新版本的莎士比亚 (yesod) 的问题。 最佳答案 问题是 PreConvert 类型在 shakespeare-1.0.2 和 shakespeare-1.0.3 之间发生了变化。在旧版本中,preEscapeBegin 和 preEscapeEnd 是构造函数 PreConvert 的字段,但在 1.0.3 版本中已被删除。所以解决办法是 使用旧版本的 shakespeare ,指定 shakespeare < 1.0.3 或 使用足够新的 shakespeare-js 版本,指定 shakespeare-js >= 1.1.2 。 (如果您使用较新的 shakespeare 版本,可能需要进一步调整,我没有尝试过。)关于haskell - 莎士比亚 js 无法在 Heroku 上编译,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15044336/
10-10 16:26