dhall-1.42.3: tests/Dhall/Test/Substitution.hs
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
module Dhall.Test.Substitution where
import Control.Exception (throwIO)
import Data.Void (Void)
import Dhall.Core (Expr (BoolLit, Var))
import Dhall.Src (Src)
import qualified Data.Either.Validation
import qualified Dhall
import qualified Dhall.Map
import qualified Lens.Micro as Lens
data Result = Failure Integer | Success String
deriving (Eq, Dhall.Generic, Show)
instance Dhall.FromDhall Result
substituteResult :: FilePath -> IO Result
substituteResult fp = do
rt <- resultType
let evaluateSettings = Lens.over Dhall.substitutions (Dhall.Map.insert "Result" rt) Dhall.defaultEvaluateSettings
Dhall.inputFileWithSettings evaluateSettings resultDecoder fp
resultDecoder :: Dhall.Decoder Result
resultDecoder = Dhall.auto
resultType :: IO (Expr Src Void)
resultType = case Dhall.expected resultDecoder of
Data.Either.Validation.Failure e -> throwIO e
Data.Either.Validation.Success x -> return x
substituteFoo :: FilePath -> IO Bool
substituteFoo fp = let
evaluateSettings = Lens.set Dhall.substitutions (Dhall.Map.fromList [("Foo", Var "Bar"), ("Bar", BoolLit True)]) Dhall.defaultEvaluateSettings
in Dhall.inputFileWithSettings evaluateSettings Dhall.auto fp