0

我正在尝试了解在 Haskell 中查找和安装具有有用功能的软件包的工具

假设我在 hoogle 中进行查询并找到一个有趣的函数:https ://hoogle.haskell.org/?hoogle=a+-%3E+%5Ba%5D+-%3E+Int&scope=set%3Astackage

在示例中,我对函数感兴趣

countElem :: Eq a => a -> [a] -> Int
MissingH Data.List.Utils

如何找到要安装的软件包名称?

我最终猜测 MissingH 是一个包名,它确实安装了(使用stack install MissingH) 之后,我如何找到要导入的包的名称?

(我问的部分原因是我确实安装了 MissingH,并且无法导入 Data.List.Utils,这很奇怪,因为我之前确实设法安装和导入了其他包。由于当前的答案让我相信我的名字是正确的,我稍后会问另一个问题,试图了解发生了什么)

(我的需要主要是了解如何以可重复的方式找到要安装的内容和要导入的内容。当然,该功能本身很容易替换)

4

1 回答 1

2

如何找到要安装的软件包名称?

这是第一项,所以MissingH.

如何找到要导入的包的名称?

你导入模块,一个包可以导出多个模块,一个函数可以被多个模块导出。正如我们在 Hoogle 中看到的:

countElem :: Eq a => a -> [a] -> Int
MissingH Data.List.Utils

因此模块是Data.List.Utils,所以我们可以使用以下命令导入它:

import Data.List.Utils(countElem)

-- …

多个包可能会导出具有相同名称的模块。为避免歧义,您可以使用PackageImports扩展名 [ghc-doc]并指定包的名称:

{-# LANGUAGE PackageImports #-}

import "MissingH" Data.List.Utils(countElem)

-- …
于 2020-12-16T22:11:11.423 回答