Как мне определить, из какого из моих импортных товаров в Haskell?

У меня есть куча импортов в моем пакете, и мне нужно разобраться, какие из них приходят из определенного пакета (MissingH). Я не уверен, как это сделать, кроме как для поиска каждого в Google. Есть ли способ сделать это программно или из командной строки, просто сканируя файлы моего пакета?

Вот мой список импорта (из всех файлов моего пакета):

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 ответа

Если пакеты находятся в Stackage, вы можете проверить список модулей на моментальный снимок, чтобы получить Map ModuleName [PackageName] переписка. Да, имя модуля может отображаться в нескольких пакетах для каждого снимка. Вот пример листинга:

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

Вы можете спросить 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на каждой.

... но это, вероятно, будет гораздо быстрее, просто удалитьMissingH из зависимостей в вашем файле cabal (вы используете инструмент сборки, такой как стек или cabal, верно??) и посмотрите, на какие жалобы GHC жалуется импорт.

Другие вопросы по тегам