安装Haskell的Threepenny GUI时snap-core构建失败求助
解决snap-core编译时parseTime不在作用域的问题
问题根源
你遇到的是snap-core 1.0.5.0版本与新版time包API不兼容的问题:time包在较新版本中移除了parseTime函数,替换为parseTimeM,但旧版snap-core仍在调用已废弃的parseTime,导致编译报错。
解决思路
1. 指定兼容的time包版本
在你的stack.yaml文件中添加extra-deps,强制使用保留parseTime的旧版time包:
extra-deps: - time-1.9.3
添加后执行stack build,Stack会拉取指定版本的time包,配合旧版snap-core完成编译。
2. 升级snap-core到兼容版本
如果Threepenny GUI的依赖约束允许,将snap-core升级到1.0.5.1及以上版本——这些版本已经修复了API调用,改用parseTimeM。修改你的项目依赖配置(cabal文件或stack.yaml),指定:
# stack.yaml中示例 packages: - . extra-deps: - snap-core-1.0.5.1
之后重新运行stack build。
3. 手动修改snap-core源码(应急方案)
如果前两种方法不可行,直接修改snap-core的源码:
- 找到Stack下载的snap-core源码目录(通常在
.stack-work/downloaded/对应的路径下) - 打开
src/Snap/Internal/Http/Types.hs,定位到第1285行 - 将
parseTime替换为parseTimeM,并补充第一个参数(是否允许宽松解析):prs = parseTimeM True defaultTimeLocale "%a, %d %b %Y %H:%M:%S GMT" - 保存后重新执行
stack build
错误详情:
snap-core > configure snap-core > Configuring snap-core-1.0.5.0... snap-core > build snap-core > Preprocessing library for snap-core-1.0.5.0.. snap-core > Building library for snap-core-1.0.5.0.. snap-core > [ 1 of 18] Compiling Snap.Internal.Debug snap-core > [ 2 of 18] Compiling Snap.Types.Headers snap-core > [ 3 of 18] Compiling Snap.Internal.Http.Types snap-core > snap-core > src\\Snap\\Internal\\Http\\Types.hs:1285:11: error: snap-core > * Variable not in scope: snap-core > parseTime :: TimeLocale -> t0 -> String -> Maybe UTCTime snap-core > * Perhaps you meant `parseTimeM' (imported from Data.Time.Format) snap-core > | snap-core > 1285 | prs = parseTime defaultTimeLocale "%a, %d %b %Y %H:%M:%S GMT" snap-core > | ^^^^^^^^^ Progress 1/4 -- While building package snap-core-1.0.5.0 (scroll up to its section to see the error) using: C:\\Users\\User\\AppData\\Roaming\\stack\\setup-exe-cache\\x86_64-windows\\Cabal-simple_Z6RU0evB_3.6.3.0_ghc-9.2.5.exe --verbose=1 --builddir=.stack-work\\dist\\8a54c84f build --ghc-options " -fdiagnostics-color=always" Process exited with code: ExitFailure 1
内容的提问来源于stack exchange,提问作者Aaron Bruce
相关产品推荐
相关产品推荐

