stack-0.0.1: src/Stack/Path.hs
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE DeriveDataTypeable #-}
-- | Implementation of the "path" subcommand
module Stack.Path
( pathString
, PathArg(..)
, pathGhc
, pathLog
, pathPackageDb
) where
import Control.Monad.Catch
import Control.Monad.Reader
import qualified Data.List as List
import Data.Typeable (Typeable)
import Path
import System.FilePath
import Stack.Types
data PathArg
= PathGhc
| PathLog
| PathPackageDb
deriving (Show, Eq, Ord)
data NotYetImplemented = NotYetImplemented String
deriving (Show, Typeable)
instance Exception NotYetImplemented
-- | Finds the selected PathArg and displays it as a String.
pathString :: (MonadReader env m, HasBuildConfig env, MonadThrow m)
=> PathArg -> m String
pathString PathGhc = liftM show pathGhc
pathString PathLog = liftM show pathLog
pathString PathPackageDb = liftM process pathPackageDb where
-- Turns the list of package-db directories into a String
-- suitable for consumption by GHC_PACKAGE_PATH.
process :: [Path Abs Dir] -> String
process = List.intercalate [searchPathSeparator] . map show
-- | The path to the ghc
-- that will be used for the current project.
pathGhc :: (MonadReader env m, HasBuildConfig env, MonadThrow m)
=> m (Path Abs File)
pathGhc = throwM $ NotYetImplemented "Stack.Path.pathGhc https://github.com/fpco/stack/issues/95"
-- (Note: it's not actually as simple as just one log dir.)
-- | The path to the log file directory
-- that will be used for the current project.
pathLog :: (MonadReader env m, HasBuildConfig env, MonadThrow m)
=> m (Path Abs Dir)
pathLog = throwM $ NotYetImplemented "Stack.Path.pathLog https://github.com/fpco/stack/issues/95"
-- | The list of package-db directories
-- that will be used for the current project.
-- The earlier databases in the list take precedence over the later ones.
pathPackageDb :: (MonadReader env m, HasBuildConfig env, MonadThrow m)
=> m [Path Abs Dir]
pathPackageDb = throwM $ NotYetImplemented "Stack.Path.pathPackageDb https://github.com/fpco/stack/issues/95"