module Metaplug.Packages ( getPackages, getPkgDesc, getPkgAuthor, getPkgExModules, getPkgDepends ) where import Distribution.InstalledPackageInfo import Distribution.Package import Control.Monad import ParsePkgConf getPackages :: FilePath -> IO [String] getPackages path = do pkgs <- loadPackageConfig path let e = map (showPackageId . package) pkgs return e getPkgDesc :: FilePath -> String -> IO (Maybe String) getPkgDesc p x = do pkgs <- loadPackageConfig p let pd = findpkg x pkgs return $ case pd of [] -> Nothing [x] -> Just $ description x (x:xs) -> Just $ description x getPkgAuthor :: FilePath -> String -> IO (Maybe String) getPkgAuthor p x = do pkgs <- loadPackageConfig p let pa = findpkg x pkgs return $ case pa of [] -> Nothing [x] -> Just $ author x (x:xs) -> Just $ author x getPkgExModules :: FilePath -> String -> IO (Maybe [String]) getPkgExModules p x = do pkgs <- loadPackageConfig p let pm = findpkg x pkgs return $ case pm of [] -> Nothing [x] -> Just $ exposedModules x (x:xs) -> Just $ exposedModules x getPkgDepends :: FilePath -> String -> IO (Maybe [String]) getPkgDepends p x = do pkgs <- loadPackageConfig p let pa = findpkg x pkgs return $ case pa of [] -> Nothing (x:_) -> let deps = map showPackageId (depends x) in case deps of [] -> Nothing [x] -> Just [x] z@(x:xs) -> Just z -- little util findpkg :: String -> [InstalledPackageInfo] -> [InstalledPackageInfo] findpkg x pkgs = filter (\pkg -> x == (showPackageId $ package pkg)) pkgs