rib-0.8.0.0: src/Rib/Parser/Dhall.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE Rank2Types #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE ViewPatterns #-}
-- | Parser for Dhall configuration files.
--
-- Use `Dhall.TH.makeHaskellTypes` to create the Haskell type first. And then
-- call `parse` from your Shake action.
module Rib.Parser.Dhall
( -- * Parsing
parse,
)
where
import Development.Shake
import Dhall (FromDhall, auto, input)
import Path
import Relude
import Rib.Shake (ribInputDir)
import System.Directory
-- | Parse a Dhall file as Haskell type.
parse ::
FromDhall a =>
-- | Dependent .dhall files, which must trigger a rebuild
[Path Rel File] ->
-- | The Dhall file to parse. Relative to `ribInputDir`.
Path Rel File ->
Action a
parse (map toFilePath -> deps) f = do
inputDir <- ribInputDir
need deps
s <- toText <$> readFile' (toFilePath $ inputDir </> f)
liftIO $ withCurrentDirectory (toFilePath inputDir) $
input auto s