【问题标题】:from hoogle, through stack, to import从hoogle,通过stack,到import
【发布时间】:2020-12-17 06:56:01
【问题描述】:

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

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

【问题讨论】:

  • 你重启了 ghci 吗?
  • 是的。我确实重新启动了它。
  • 一旦我做一些测试,我会问一个单独的问题

标签: haskell hoogle


【解决方案1】:

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

这是第一项,所以MissingH

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

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

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

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

import Data.List.Utils(countElem)

-- …

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

{-# LANGUAGE PackageImports #-}

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

-- …

【讨论】:

    猜你喜欢
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 2015-08-25
    • 2017-03-22
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多