我的包中有一堆导入,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)
发布于 2018-10-10 15:56:59
您可以询问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
。
...but从cabal文件中的依赖项中删除MissingH
可能会快得多(您正在使用堆栈或cabal之类的构建工具,对吧?)看看GHC抱怨哪些进口产品。
发布于 2018-10-10 16:19:23
如果包在堆栈中,您可以检查模块列表中的快照,以获取Map ModuleName [PackageName]
对应关系。可以,一个模块名称可以出现在每个快照的多个包中。下面是一个示例清单:
https://stackoverflow.com/questions/52743115
复制