module BuilderDirs (BuilderDirs(..), currentDir) where

import Control.Applicative (liftA2)
import Path (Abs, Dir, Path, Rel, (</>))
import Control.Monad.Trans.Reader (ReaderT, asks)

data BuilderDirs = BuilderDirs
  { BuilderDirs -> Path Abs Dir
_root :: Path Abs Dir
  , BuilderDirs -> Path Rel Dir
_subdir :: Path Rel Dir
  }

currentDir :: ReaderT BuilderDirs IO (Path Abs Dir)
currentDir :: ReaderT BuilderDirs IO (Path Abs Dir)
currentDir = (Path Abs Dir -> Path Rel Dir -> Path Abs Dir)
-> ReaderT BuilderDirs IO (Path Abs Dir)
-> ReaderT BuilderDirs IO (Path Rel Dir)
-> ReaderT BuilderDirs IO (Path Abs Dir)
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 Path Abs Dir -> Path Rel Dir -> Path Abs Dir
forall b t. Path b Dir -> Path Rel t -> Path b t
(</>) ((BuilderDirs -> Path Abs Dir)
-> ReaderT BuilderDirs IO (Path Abs Dir)
forall (m :: * -> *) r a. Monad m => (r -> a) -> ReaderT r m a
asks BuilderDirs -> Path Abs Dir
_root) ((BuilderDirs -> Path Rel Dir)
-> ReaderT BuilderDirs IO (Path Rel Dir)
forall (m :: * -> *) r a. Monad m => (r -> a) -> ReaderT r m a
asks BuilderDirs -> Path Rel Dir
_subdir)