2017-01-12 16:36:47 +01:00
|
|
|
module GhcMod.Modules (modules) where
|
2010-03-11 19:03:17 +09:00
|
|
|
|
2015-03-05 18:54:39 +01:00
|
|
|
import Control.Arrow
|
|
|
|
|
import Data.List
|
2014-05-12 00:40:00 +02:00
|
|
|
import Language.Haskell.GhcMod.Convert
|
2015-03-05 18:54:39 +01:00
|
|
|
import Language.Haskell.GhcMod.Types
|
2014-07-17 14:30:42 +09:00
|
|
|
import Language.Haskell.GhcMod.Monad
|
2015-03-05 18:54:39 +01:00
|
|
|
import Language.Haskell.GhcMod.Gap ( listVisibleModuleNames
|
|
|
|
|
, lookupModulePackageInAllPackages
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
import qualified GHC as G
|
2010-03-11 19:03:17 +09:00
|
|
|
|
|
|
|
|
----------------------------------------------------------------
|
|
|
|
|
|
2013-05-20 14:28:56 +09:00
|
|
|
-- | Listing installed modules.
|
2015-12-07 19:57:33 +03:00
|
|
|
modules :: (IOish m, Gm m)
|
|
|
|
|
=> Bool -- ^ 'detailed', if 'True', also prints packages that modules belong to.
|
|
|
|
|
-> m String
|
2015-12-05 23:55:12 +03:00
|
|
|
modules detailed = do
|
2015-03-05 18:54:39 +01:00
|
|
|
df <- runGmPkgGhc G.getSessionDynFlags
|
|
|
|
|
let mns = listVisibleModuleNames df
|
|
|
|
|
pmnss = map (first moduleNameString) $ zip mns (modulePkg df `map` mns)
|
2015-12-05 23:55:12 +03:00
|
|
|
convert' $ nub [ if detailed then pkg ++ " " ++ mn else mn
|
2015-03-05 18:54:39 +01:00
|
|
|
| (mn, pkgs) <- pmnss, pkg <- pkgs ]
|
|
|
|
|
where
|
|
|
|
|
modulePkg df = lookupModulePackageInAllPackages df
|