从 hoogle,通过堆栈,到导入

from hoogle, through stack, to import

我正在尝试了解在 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,这很奇怪,因为我之前确实设法安装和导入了其他包。因为当前的答案让我相信我得到了名字没错,我稍后会问另一个问题,试图了解发生了什么)

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

How to I find the package names to install?

那是第一项,所以MissingH

how do I find the name of the package to import?

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

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

模块因此是 Data.List.Utils,所以我们可以导入它:

import <b>Data.List.Utils(countElem)</b>

-- …

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

{-# LANGUAGE <b>PackageImports</b> #-}

import <b>"MissingH"</b> Data.List.Utils(countElem)

-- …