module Paths ( vheDirStructure
, cabalConfigLocation
, getVirtualEnvironment
) where
import System.FilePath ((</>))
import System.Directory (getCurrentDirectory)
import System.Environment (getEnvironment)
import Types
import MyMonad
-- returns record containing paths to all important directories
-- inside virtual environment dir structure
vheDirStructure :: MyMonad DirStructure
vheDirStructure = do
cwd <- liftIO getCurrentDirectory
let virthualEnvLocation = cwd
virthualEnvDirLocation = virthualEnvLocation </> ".virthualenv"
cabalDirLocation = virthualEnvDirLocation </> "cabal"
ghcDirLocation = virthualEnvDirLocation </> "ghc"
return DirStructure { virthualEnv = virthualEnvLocation
, virthualEnvDir = virthualEnvDirLocation
, ghcPackagePath = virthualEnvDirLocation </> "ghc_pkg_db"
, cabalDir = cabalDirLocation
, cabalBinDir = cabalDirLocation </> "bin"
, virthualEnvBinDir = virthualEnvDirLocation </> "bin"
, ghcDir = ghcDirLocation
, ghcBinDir = ghcDirLocation </> "bin"
}
-- returns location of cabal's config file inside virtual environment dir structure
cabalConfigLocation :: MyMonad FilePath
cabalConfigLocation = do
dirStructure <- vheDirStructure
return $ cabalDir dirStructure </> "config"
-- returns environment dictionary used in Virtual Haskell Environment
-- it's inherited from the current process, but variable
-- GHC_PACKAGE_PATH is altered.
getVirtualEnvironment :: MyMonad [(String, String)]
getVirtualEnvironment = do
env <- liftIO getEnvironment
dirStructure <- vheDirStructure
return $ ("GHC_PACKAGE_PATH", ghcPackagePath dirStructure) : filter (\(k,_) -> k /= "GHC_PACKAGE_PATH") env