{-# LANGUAGE TemplateHaskell #-} module Horizon.Spec.Types.PackagesDir (PackagesDir(MkPackagesDir), fromPackagesDir, mkPackagesDir) where import Data.Kind (Type) import Dhall (FromDhall, ToDhall) import Language.Haskell.TH (Exp, Q) import Language.Haskell.TH.Lift (deriveLift, lift) import Path (Dir, Path, Rel, parseRelDir) import Path.Dhall () type PackagesDir :: Type newtype PackagesDir = MkPackagesDir { fromPackagesDir :: Path Rel Dir } deriving stock (Eq, Show) deriving newtype (FromDhall, ToDhall) $(deriveLift 'MkPackagesDir) mkPackagesDir :: FilePath -> Q Exp mkPackagesDir = either (error . show) (lift . MkPackagesDir) . parseRelDir