如何确定我的进口商品来自Haskell?

时间:2018-10-10 14:56:57

标签: haskell

我的包装中有一堆进口货,need to整理出哪些进口货来自特定的包装(MissingH)。除了在Hoogle上搜索每个内容外,我不确定如何执行此操作。是否可以通过扫描软件包的文件来以编程方式或在命令行上执行此操作?

这是我的导入列表(来自my package的所有文件):

import           Control.Arrow
import           Control.Exception      (assert)
import           Control.Monad          (unless)
import           Control.Monad.Except
import           Control.Monad.Zip
import           Control.Applicative
import           Data.Monoid
import           Data.List
import           Data.List.Split        (splitOn)
import qualified Data.Map               as M
import           Data.Maybe
import           Text.Printf            (printf)
import           Data.Char              (toUpper)
import           Data.String.Utils      (replace)

import Data.Char (chr, ord)
import Data.List (sort)

import Control.Applicative
import Data.Monoid
import Data.Char
import Data.List
import Data.List.Split          (chunksOf)
import Data.String.Utils        (replace)
import Text.Printf              (printf)

2 个答案:

答案 0 :(得分:3)

您可以询问GHC它认为模块来自哪里(如果您已经安装了提供该模块的软件包)。

% ghc-pkg find-module Data.Maybe
/usr/local/lib/ghc-8.2.2/package.conf.d
    base-4.10.1.0
/home/dmwit/.ghc/x86_64-linux-8.2.2/package.conf.d
    (no packages)

您可能可以制作一些快速脚本来自动调用它,并覆盖人们实际编写的99.9%的代码。您可能还想滥用graphmod -使用它来创建模块图,然后忽略该图的所有结构,仅遍历它为您发现的模块名称列表,然后调用ghc-pkg每个。

...但是,仅从cabal文件中的依赖项中删除MissingH可能会更快(您使用堆栈或cabal之类的构建工具,对吗? ?),然后查看GHC抱怨哪些进口商品。

答案 1 :(得分:3)

如果软件包在堆栈中,则可以检查模块列表中的快照以获取$(this).closest('ul').closest('li'); 对应关系。是的,每个快照的多个软件包中可能出现一个模块名称。这是一个示例清单:

https://www.stackage.org/lts-12.12/docs