{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE TemplateHaskell #-} module Horizon.Spec.Types.OverlayFile (OverlayFile(MkOverlayFile), fromOverlayFile, mkOverlayFile) where import Data.Kind (Type) import Dhall (FromDhall, ToDhall) import Language.Haskell.TH (Exp, Q) import Language.Haskell.TH.Lift (deriveLift, lift) import Path (File, Path, Rel, parseRelFile) import Path.Dhall () type OverlayFile :: Type newtype OverlayFile = MkOverlayFile { fromOverlayFile :: Path Rel File } deriving stock (Eq, Show) deriving newtype (FromDhall, ToDhall) $(deriveLift 'MkOverlayFile) mkOverlayFile :: FilePath -> Q Exp mkOverlayFile = either (error . show) (lift . MkOverlayFile) . parseRelFile