module Haskell.Docs.Cabal where
import Data.Function
import Haskell.Docs.Ghc
import Data.List
import Distribution.InstalledPackageInfo
import Distribution.ModuleName
import Distribution.Package
import Distribution.Simple.Compiler
import Distribution.Simple.GHC
import Distribution.Simple.PackageIndex
import Distribution.Simple.Program
import Distribution.Verbosity
import Module
import PackageConfig
getAllPackages :: IO [PackageConfig]
getAllPackages =
do config <- configureAllKnownPrograms
normal
(addKnownPrograms [ghcProgram,ghcPkgProgram]
emptyProgramConfiguration)
index <- getInstalledPackages
normal
[GlobalPackageDB,UserPackageDB]
config
return (map (imap convModule)
(concat (packagesByName index)))
packagesByName :: PackageIndex -> [[InstalledPackageInfo]]
#if MIN_VERSION_Cabal(1,16,0)
packagesByName = map snd . allPackagesByName
#else
packagesByName = allPackagesByName
#endif
convModule :: Distribution.ModuleName.ModuleName -> Module.ModuleName
convModule = makeModuleName . intercalate "." . components
imap :: (a -> m) -> InstalledPackageInfo_ a -> InstalledPackageInfo_ m
imap f i@(InstalledPackageInfo{..}) =
i { exposedModules = map f exposedModules
, hiddenModules = map f hiddenModules }