rib-0.7.0.0: src/Rib/Parser/Dhall.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE Rank2Types #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE ViewPatterns #-}
-- | Parser for Dhall files.
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.
--
-- Use `Dhall.TH.makeHaskellTypes` to create the Haskell type first.
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