Haskell 从hoogle到stack,再到导入

Haskell 从hoogle到stack,再到导入,haskell,hoogle,Haskell,Hoogle,我试图了解在Haskell中查找和安装具有有用功能的软件包的工具 假设我在hoogle中进行查询并找到一个有趣的函数: 在本例中,我对函数感兴趣 countElem :: Eq a => a -> [a] -> Int MissingH Data.List.Utils 如何找到要安装的软件包名称 我最后猜测MissingH是一个包名,它确实安装了(使用stack install MissingH),然后,我如何找到要导入的包名 (我问这个问题的部分原因是我确实安装了Missi

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

假设我在hoogle中进行查询并找到一个有趣的函数:

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

countElem :: Eq a => a -> [a] -> Int
MissingH Data.List.Utils
如何找到要安装的软件包名称

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

(我问这个问题的部分原因是我确实安装了MissingH,并且无法导入Data.List.Utils,这很奇怪,因为我以前确实安装并导入了其他软件包。因为当前的答案让我相信我的名字是对的,我将在后面问另一个问题,试图了解发生了什么)

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

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

这是第一项,因此
MissingH

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

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

countElem :: Eq a => a -> [a] -> Int
MissingH Data.List.Utils
多个包可能导出具有相同名称的模块。为避免歧义,您可以使用并指定包的名称:

{-# LANGUAGE PackageImports #-}

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

-- …
{-#语言包导入}
导入“MissingH”数据.List.Utils(countElem)
--…
如何找到要安装的软件包名称

这是第一项,因此
MissingH

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

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

countElem :: Eq a => a -> [a] -> Int
MissingH Data.List.Utils
多个包可能导出具有相同名称的模块。为避免歧义,您可以使用并指定包的名称:

{-# LANGUAGE PackageImports #-}

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

-- …
{-#语言包导入}
导入“MissingH”数据.List.Utils(countElem)

--…
您重新启动了ghci吗?是的。我重新启动了。一旦我做了一些测试,我会问另外一个问题。你会重新启动ghci吗?是的。我确实重新启动了它。一旦我做了一些测试,我会问另外一个问题