在安装shakespeare-js-1.0.2时,将我的简单Yesod应用程序部署到Heroku cabal时失败
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.2
Last 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世界。 在我的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。
我尝试了以下内容:
编辑:
我通过强迫莎士比亚<解决了这个错误。 1.0.3 这并没有解决无法编译最新版本的莎士比亚(yesod)的问题。
答案 0 :(得分:2)
问题是类型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
版本,可能需要进一步调整,我还没试过。)