如何查找Haskell正确包名及版本?以System.Eval.Haskell为例
搞定你的Haskell包配置困惑
嘿,我来帮你理清这两个头疼的Haskell配置问题:
一、先搞清楚System.Eval.Haskell属于哪个包
你没看错,System.Eval.Haskell确实是plugins包的一部分——你访问的文档页面就是这个包的1.5.7版本。如果直接写plugins无效,大概率是版本指定的问题:这个版本是2019年的,比较旧,可能不在你当前用的Stackage快照里,所以得明确写版本号才行。
在package.yaml里这么配置就对了:
dependencies: - base >= 4.7 && < 5 - plugins == 1.5.7
要是这个版本不在你的Stackage快照索引里,就得把它加到extra-dependencies里——这正好关联到你第二个疑问。
二、常规依赖和extra-dependencies到底差在哪
一句话说清:核心差异是看包在不在当前Stackage快照的收录范围内:
- 常规dependencies:这里列的包必须是你项目用的Stackage快照(比如lts-20.x这类)里收录的。Stack会自动从快照镜像拉取,还能保证版本兼容,一般不用写版本号(除非你想强制用某个特定版本)。
- extra-dependencies:专门用来加那些不在当前快照里的包,或者你需要用快照以外的特定版本(比如你要的plugins-1.5.7)。这些包直接从Hackage拉取,必须明确写版本号。
举个实际例子:如果你的项目用的是新的LTS快照,而plugins-1.5.7不在里面,那就在stack.yaml里添加:
extra-dependencies: - plugins-1.5.7
同时package.yaml的dependencies里保留plugins == 1.5.7,Stack就能正确拉取这个版本了。
三、要是还不行,试试这几个排查点
如果按上面配置还是报错,可以检查:
- 去Stackage官网查一下你用的resolver快照里有没有plugins-1.5.7,确认是不是真的不在快照里。
- 看
stack build的报错信息,如果是版本冲突,要么调整base的版本范围,要么试试plugins的新版本(比如1.6.1,看看和你的base版本兼容不)。
内容的提问来源于stack exchange,提问作者Zazaeil
相关产品推荐
相关产品推荐

