26 lines
801 B
Haskell
26 lines
801 B
Haskell
|
module Language.Haskell.GhcMod.CustomPackageDb where
|
||
|
|
||
|
|
||
|
import Control.Applicative
|
||
|
import Control.Monad
|
||
|
import Control.Category ((.))
|
||
|
import Data.Maybe
|
||
|
import Data.Traversable
|
||
|
import Language.Haskell.GhcMod.Types
|
||
|
import Language.Haskell.GhcMod.Monad.Types
|
||
|
import Language.Haskell.GhcMod.PathsAndFiles
|
||
|
import Prelude hiding ((.))
|
||
|
|
||
|
|
||
|
parseCustomPackageDb :: String -> [GhcPkgDb]
|
||
|
parseCustomPackageDb src = map parsePkgDb $ filter (not . null) $ lines src
|
||
|
where
|
||
|
parsePkgDb "global" = GlobalDb
|
||
|
parsePkgDb "user" = UserDb
|
||
|
parsePkgDb s = PackageDb s
|
||
|
|
||
|
getCustomPkgDbStack :: (IOish m, GmEnv m) => m (Maybe [GhcPkgDb])
|
||
|
getCustomPkgDbStack = do
|
||
|
mCusPkgDbFile <- liftIO . (traverse readFile <=< findCustomPackageDbFile) . cradleRootDir =<< cradle
|
||
|
return $ parseCustomPackageDb <$> mCusPkgDbFile
|