我在哪里可以找到Haskell的正确包名和版本?

时间:2018-02-18 17:54:24

标签: haskell haskell-stack

说,我需要System.Eval.Haskell。或者别的什么。我怎么知道我应该在package.yaml中指定哪个包?当我转到https://hackage.haskell.org/package/plugins-1.5.7/docs/System-Eval-Haskell.html时,我看不到包裹名称。

P.S。 “插件”对我不起作用。因此,我认为它是不同的东西。我希望如此:)

看起来配置中的额外依赖性和“常规”依赖关系之间存在一些相当不明显的区别。提及plugins-1.5.7作为extra-dep确实有效。我在这里做了一些依赖管理不善,或者那是绿色的方式吗?

3 个答案:

答案 0 :(得分:3)

  

看起来配置中的额外依赖性和“常规”依赖关系之间存在一些相当不明显的区别。提及plugins-1.5.7作为extra-dep确实有效。我在这里做了一些依赖管理不善,或者那是绿色的方式吗?

应该是这样的。问题是Haskell软件包有两个主要档案: Hackage ,它基本上包括每个软件包和每个版本,以及 Stackage ,它是Hackage捆绑的一个大子集到相互兼容的包和版本的快照。堆栈默认为从Stackage绘制包,因此如果您想使用Hackage中不在Stackage中的包,您还必须将其添加到extra-deps的{​​{1}}。是否在Stackage中的包可以找到contents page of the package in the Hackage docs(如果它在Stackage上,它将在“Distributions”字段中有一个条目)。同样相关的是Stackage Hoogle,它允许您在Stackage快照中搜索包名称,模块和标识符。

PS:有关Hackage,Stackage和Stack之间关系的更多信息,您可以查看我对What is the difference between Cabal and Stack?的回答(您可以将“stack.yaml文件”的任何提及替换为“ .cabal“,如果你正在使用它。”

答案 1 :(得分:2)

当您查看有关hackage的模块文档时,包名称位于左上角:

Package name highlighted

在这种情况下,确实是插件,版本1.5.7。

当您在html, body { margin: 0px; padding: 0px; outline-offset: 0px; background-color: #FFEAE5; } .mainTitle { display: inline; } .logo2 { display: inline; color: #FFEAE5; font-size: 18px; font-style: italic; } .logo1 { font-family: Gotham, "Helvetica Neue", Helvetica, Arial, sans-serif; display: inline; color: #FFEAE5; } .top1 { padding: 5px; padding-top: 3px; padding-left: 25px; background-color: #F87666; } 文件中声明依赖项时,Stack会尝试查找适合您所定位的Long-Term Support(LTS)集合的版本。

有时,您希望使用与LTS集合中可用的版本不同的版本(例如,如果您想要更新的版本),在这种情况下,您可以在{{1}中定义软件包及其特定版本}}

答案 2 :(得分:1)

  

说,我需要System.Eval.Haskell。或者别的什么。我怎么知道我应该在package.yaml中指定哪个包?

可能有许多软件包导出特定模块,因此您无法知道从模块名称导入哪个软件包。但一般来说,谷歌搜索显而易见。

正如duplode提到的那样,包被命名为plugins,并且您发现堆栈使用<package_name>-<version>格式在stack.yaml中指定包名+版本。 Cabal使用不同的格式,更灵活(可以指定模糊包版本范围等)。由于堆栈适用于包版本的固定快照,因此plugins-1.5.7格式就足够了。

当您在plugins文件中写下*.cabal时,您指定的内容类似于&#34;任何版本的plugins,但更喜欢最新的&#34;。但是,因为您的软件包存储库仅限于stack的特定快照,您真正要做的就是让stack管理您的依赖项。