无法找到Criterion.Main模块,安装criterion包失败求助
解决Haskell Criterion安装失败与模块找不到的问题
嘿,我来帮你搞定这个头疼的问题!你遇到的是连锁的两个问题:先是代码跑不起来找不到Criterion.Main模块,然后尝试安装Criterion时一堆依赖包编译失败。这主要是因为你的GHC和Cabal版本比较老,和最新的Hackage包不兼容导致的,咱们一步步来解决:
问题根源分析
你的GHC是8.4.2(对应base库4.11.1.0),Cabal是2.2.0.0,都是2018年左右的版本。而现在Hackage上的大部分新包已经不再支持这么老的GHC版本了,直接安装最新版Criterion会拉取一堆不兼容的依赖,自然就编译失败了。
具体解决方案
1. 切换到兼容旧GHC的Hackage索引状态
你执行cabal update后,系统提示了一个可以回退的索引状态:2018-06-01T04:23:08Z,这个时间点的包都是和GHC8.4.2完全兼容的,先切换过去:
cabal update --index-state='2018-06-01T04:23:08Z'
2. 安装兼容版本的Criterion
现在安装Criterion,加上--disable-tests可以跳过测试编译,加快安装速度,也能避免测试依赖的额外问题:
cabal install -j --disable-tests criterion
如果还是有问题,可以直接指定明确兼容的版本(比如1.3.0.0,这个版本完全适配GHC8.4.x):
cabal install -j --disable-tests criterion-1.3.0.0
3. 验证安装并运行你的代码
安装成功后,编译你的基准测试代码:
ghc -O2 fiber.hs
然后运行生成的可执行文件就能看到基准测试结果了:
./fiber
额外小贴士
如果以后经常遇到这类旧版本GHC的依赖问题,推荐试试Stack工具——它会自动为你的项目匹配兼容的GHC版本和依赖包,不用手动处理这些版本兼容问题,省心很多。不过如果坚持用Cabal的话,上面的方法完全可以解决当前问题。
内容的提问来源于stack exchange,提问作者Mamtaj Akter
相关产品推荐
相关产品推荐

