horizon-spec 0.6.3 → 0.6.4
raw patch · 29 files changed
+509/−209 lines, 29 files
Files
- ChangeLog.md +7/−0
- horizon-spec.cabal +31/−2
- src/Horizon/Spec.hs +52/−207
- src/Horizon/Spec/Types/CabalFlag.hs +13/−0
- src/Horizon/Spec/Types/Compiler.hs +11/−0
- src/Horizon/Spec/Types/Flag.hs +12/−0
- src/Horizon/Spec/Types/GitSource.hs +14/−0
- src/Horizon/Spec/Types/HackageSource.hs +13/−0
- src/Horizon/Spec/Types/HaskellPackage.hs +25/−0
- src/Horizon/Spec/Types/HaskellSource.hs +19/−0
- src/Horizon/Spec/Types/HorizonExport.hs +15/−0
- src/Horizon/Spec/Types/LocalSource.hs +12/−0
- src/Horizon/Spec/Types/Modifiers.hs +40/−0
- src/Horizon/Spec/Types/Name.hs +11/−0
- src/Horizon/Spec/Types/Overlay.hs +11/−0
- src/Horizon/Spec/Types/OverlayExportSettings.hs +16/−0
- src/Horizon/Spec/Types/OverlayFile.hs +20/−0
- src/Horizon/Spec/Types/PackageList.hs +13/−0
- src/Horizon/Spec/Types/PackageSet.hs +14/−0
- src/Horizon/Spec/Types/PackageSetExportSettings.hs +16/−0
- src/Horizon/Spec/Types/PackageSetFile.hs +19/−0
- src/Horizon/Spec/Types/PackagesDir.hs +19/−0
- src/Horizon/Spec/Types/Repo.hs +11/−0
- src/Horizon/Spec/Types/Revision.hs +11/−0
- src/Horizon/Spec/Types/Subdir.hs +19/−0
- src/Horizon/Spec/Types/TarballSource.hs +12/−0
- src/Horizon/Spec/Types/Url.hs +11/−0
- src/Horizon/Spec/Types/Version.hs +11/−0
- src/Horizon/Spec/Utils.hs +31/−0
ChangeLog.md view
@@ -1,5 +1,12 @@ # Changelog for horizon-spec +## v0.6.4++* Separate Types out into separate modules.+* Horizon.Spec.Types.Modifiers: add `defaultModifiers`.+* Horizon.Spec.Types.HaskellPackage: add `mkHaskellPackage`+* Horizon.Spec.Utils: init with `call{Hackage, Git, Local, Tarball}`+ ## v0.6.3 * Add `mkSubdir` splice function.
horizon-spec.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: horizon-spec-version: 0.6.3+version: 0.6.4 synopsis: Horizon Stable Package Set Type Definitions description: This package contains the type definitions for the Horizon stable package set (https://horizon-haskell.net). This is a schema used to define package sets sourcing from hackage and git.@@ -31,12 +31,41 @@ location: https://gitlab.homotopic.tech/horizon/horizon-spec library- exposed-modules: Horizon.Spec+ exposed-modules:+ Horizon.Spec+ Horizon.Spec.Types.CabalFlag+ Horizon.Spec.Types.Compiler+ Horizon.Spec.Types.Flag+ Horizon.Spec.Types.GitSource+ Horizon.Spec.Types.HackageSource+ Horizon.Spec.Types.HaskellPackage+ Horizon.Spec.Types.HaskellSource+ Horizon.Spec.Types.HorizonExport+ Horizon.Spec.Types.LocalSource+ Horizon.Spec.Types.Modifiers+ Horizon.Spec.Types.Name+ Horizon.Spec.Types.Overlay+ Horizon.Spec.Types.OverlayExportSettings+ Horizon.Spec.Types.OverlayFile+ Horizon.Spec.Types.PackageList+ Horizon.Spec.Types.PackagesDir+ Horizon.Spec.Types.PackageSet+ Horizon.Spec.Types.PackageSetExportSettings+ Horizon.Spec.Types.PackageSetFile+ Horizon.Spec.Types.Repo+ Horizon.Spec.Types.Revision+ Horizon.Spec.Types.Subdir+ Horizon.Spec.Types.TarballSource+ Horizon.Spec.Types.Url+ Horizon.Spec.Types.Version+ Horizon.Spec.Utils+ hs-source-dirs: src default-extensions: DataKinds DeriveGeneric DerivingStrategies+ DuplicateRecordFields GADTs GeneralizedNewtypeDeriving StandaloneKindSignatures
src/Horizon/Spec.hs view
@@ -1,211 +1,56 @@-{-# LANGUAGE DeriveAnyClass #-}+{-# OPTIONS_GHC -fno-warn-missing-import-lists #-} {-# LANGUAGE DuplicateRecordFields #-}-{-# LANGUAGE TemplateHaskell #-}-module Horizon.Spec- ( CabalFlag(MkCabalFlag)- , Compiler(MkCompiler, fromCompiler)- , Flag(Enable, Disable)- , GitSource(MkGitSource, url, revision, subdir)- , HackageSource(MkHackageSource, name, version)- , HaskellPackage(MkHaskellPackage, source, modifiers, flags)- , HaskellSource(FromGit, FromHackage, FromTarball, FromLocal)- , HorizonExport(MakePackageSet, MakeOverlay)- , LocalSource(MkLocalSource, fromLocalSource)- , Modifiers(MkModifiers, doJailbreak, doBenchmark, doCheck, enableProfiling, includeBenchmarks, includeExecutables, includeTests)- , Name(MkName, fromName)- , OverlayExportSettings(MkOverlayExportSettings, packagesDir, overlayFile, overlay)- , OverlayFile(MkOverlayFile, fromOverlayFile)- , Overlay(MkOverlay, fromOverlay)- , PackageList(MkPackageList, fromPackageList)- , PackageSetExportSettings(MkPackageSetExportSettings, packagesDir, packageSetFile, packageSet)- , PackageSetFile(MkPackageSetFile, fromPackageSetFile)- , PackageSet(MkPackageSet, compiler, packages)- , PackagesDir(MkPackagesDir, fromPackagesDir)- , Repo(MkRepo, fromRepo)- , Revision(MkRevision, fromRevision)- , Subdir(MkSubdir, fromSubdir)- , mkSubdir- , TarballSource(MkTarballSource, fromTarballSource)- , Url(MkUrl, fromUrl)- , Version (MkVersion, fromVersion)+module Horizon.Spec (+ module Horizon.Spec.Types.CabalFlag,+ module Horizon.Spec.Types.Compiler,+ module Horizon.Spec.Types.Flag,+ module Horizon.Spec.Types.GitSource,+ module Horizon.Spec.Types.HackageSource,+ module Horizon.Spec.Types.HaskellPackage,+ module Horizon.Spec.Types.HaskellSource,+ module Horizon.Spec.Types.HorizonExport,+ module Horizon.Spec.Types.LocalSource,+ module Horizon.Spec.Types.Modifiers,+ module Horizon.Spec.Types.Name,+ module Horizon.Spec.Types.OverlayExportSettings,+ module Horizon.Spec.Types.OverlayFile,+ module Horizon.Spec.Types.Overlay,+ module Horizon.Spec.Types.PackageList,+ module Horizon.Spec.Types.PackageSetExportSettings+, module Horizon.Spec.Types.PackageSetFile+, module Horizon.Spec.Types.PackageSet+, module Horizon.Spec.Types.PackagesDir+, module Horizon.Spec.Types.Repo+, module Horizon.Spec.Types.Revision+, module Horizon.Spec.Types.Subdir+, module Horizon.Spec.Types.TarballSource+, module Horizon.Spec.Types.Url+, module Horizon.Spec.Types.Version ) where -import Data.Kind (Type)-import Data.Map (Map)-import Data.String (IsString)-import Data.Text (Text)-import Dhall (FromDhall, Generic, ToDhall)-import Language.Haskell.TH (Exp, Q)-import Language.Haskell.TH.Lift (deriveLift, lift)-import Path (Dir, File, Path, Rel, parseRelDir)-import Path.Dhall ()---type Url :: Type-newtype Url = MkUrl { fromUrl :: Text }- deriving stock (Eq, Show)- deriving newtype (FromDhall, ToDhall, IsString)--type Repo :: Type-newtype Repo = MkRepo { fromRepo :: Url }- deriving stock (Eq, Show)- deriving newtype (FromDhall, ToDhall, IsString)--type Subdir :: Type-newtype Subdir = MkSubdir { fromSubdir :: Path Rel Dir }- deriving stock (Eq, Show)- deriving newtype (FromDhall, ToDhall)--$(deriveLift 'MkSubdir)--mkSubdir :: FilePath -> Q Exp-mkSubdir = either (error . show) (lift . MkSubdir) . parseRelDir--type Name :: Type-newtype Name = MkName { fromName :: Text }- deriving stock (Eq, Ord, Show)- deriving newtype (FromDhall, ToDhall, IsString)--type Version :: Type-newtype Version = MkVersion { fromVersion :: Text }- deriving stock (Eq, Show)- deriving newtype (FromDhall, ToDhall, IsString)--type GitSource :: Type-data GitSource where- MkGitSource :: { url :: Repo, revision :: Revision, subdir :: Maybe Subdir } -> GitSource- deriving stock (Eq, Show, Generic)- deriving anyclass (FromDhall, ToDhall)--type HackageSource :: Type-data HackageSource where- MkHackageSource :: { name :: Name, version :: Version } -> HackageSource- deriving stock (Eq, Show, Generic)- deriving anyclass (FromDhall, ToDhall)--type LocalSource :: Type-newtype LocalSource where- MkLocalSource :: { fromLocalSource :: Subdir } -> LocalSource- deriving stock (Eq, Show, Generic)- deriving newtype (FromDhall, ToDhall)--type TarballSource :: Type-newtype TarballSource where- MkTarballSource :: { fromTarballSource :: Url } -> TarballSource- deriving stock (Eq, Show, Generic)- deriving newtype (FromDhall, ToDhall)--type HaskellSource :: Type-data HaskellSource where- FromGit :: GitSource -> HaskellSource- FromHackage :: HackageSource -> HaskellSource- FromLocal :: LocalSource -> HaskellSource- FromTarball :: TarballSource -> HaskellSource- deriving stock (Show, Eq, Generic)- deriving anyclass (FromDhall, ToDhall)--type Flag :: Type -> Type-data Flag a where- Enable :: a -> Flag a- Disable :: a -> Flag a- deriving stock (Show, Eq, Generic)- deriving anyclass (FromDhall, ToDhall)--type CabalFlag :: Type-data CabalFlag where- MkCabalFlag :: Flag Text -> CabalFlag- deriving stock (Show, Eq, Generic)- deriving anyclass (FromDhall, ToDhall)--type Modifiers :: Type-data Modifiers where- MkModifiers :: { doBenchmark :: Bool- , doCheck :: Bool- , doJailbreak :: Bool- , enableProfiling :: Bool- , includeBenchmarks :: Bool- , includeExecutables :: Bool- , includeTests :: Bool } -> Modifiers- deriving stock (Show, Eq, Generic)- deriving anyclass (FromDhall, ToDhall)--type HaskellPackage :: Type-data HaskellPackage where- MkHaskellPackage :: { source :: HaskellSource- , modifiers :: Modifiers- , flags :: [CabalFlag] } -> HaskellPackage- deriving stock (Show, Eq, Generic)- deriving anyclass (FromDhall, ToDhall)--type Revision :: Type-newtype Revision where- MkRevision :: { fromRevision :: Text } -> Revision- deriving stock (Show, Eq, Generic)- deriving newtype (FromDhall, ToDhall, IsString)--type Compiler :: Type-newtype Compiler where- MkCompiler :: { fromCompiler :: Text } -> Compiler- deriving stock (Show, Eq, Generic)- deriving newtype (FromDhall, ToDhall)--type PackageList :: Type-newtype PackageList where- MkPackageList :: { fromPackageList :: Map Name HaskellPackage } -> PackageList- deriving stock (Show, Eq, Generic)- deriving newtype (FromDhall, ToDhall)--type Overlay :: Type-newtype Overlay where- MkOverlay :: { fromOverlay :: PackageSet } -> Overlay- deriving stock (Show, Eq, Generic)- deriving newtype (FromDhall, ToDhall)--type PackageSet :: Type-data PackageSet where- MkPackageSet :: { compiler :: Compiler- , packages :: PackageList } -> PackageSet- deriving stock (Show, Eq, Generic)- deriving anyclass (FromDhall, ToDhall)--type PackagesDir :: Type-newtype PackagesDir where- MkPackagesDir :: { fromPackagesDir :: Path Rel Dir } -> PackagesDir- deriving stock (Show, Eq, Generic)- deriving newtype (FromDhall, ToDhall)--type PackageSetFile :: Type-newtype PackageSetFile where- MkPackageSetFile :: { fromPackageSetFile :: Path Rel File } -> PackageSetFile- deriving stock (Show, Eq, Generic)- deriving newtype (FromDhall, ToDhall)--type OverlayFile :: Type-newtype OverlayFile where- MkOverlayFile :: { fromOverlayFile :: Path Rel File } -> OverlayFile- deriving stock (Show, Eq, Generic)- deriving newtype (FromDhall, ToDhall)--type PackageSetExportSettings :: Type-data PackageSetExportSettings where- MkPackageSetExportSettings :: { packagesDir :: PackagesDir- , packageSetFile :: PackageSetFile- , packageSet :: PackageSet } -> PackageSetExportSettings- deriving stock (Show, Eq, Generic)- deriving anyclass (FromDhall, ToDhall)--type OverlayExportSettings :: Type-data OverlayExportSettings where- MkOverlayExportSettings :: { packagesDir :: PackagesDir- , overlayFile :: OverlayFile- , overlay :: Overlay } -> OverlayExportSettings- deriving stock (Show, Eq, Generic)- deriving anyclass (FromDhall, ToDhall)--type HorizonExport :: Type-data HorizonExport where- MakePackageSet :: PackageSetExportSettings -> HorizonExport- MakeOverlay :: OverlayExportSettings -> HorizonExport- deriving stock (Show, Eq, Generic)- deriving anyclass (FromDhall, ToDhall)+import Horizon.Spec.Types.CabalFlag+import Horizon.Spec.Types.Compiler+import Horizon.Spec.Types.Flag+import Horizon.Spec.Types.GitSource+import Horizon.Spec.Types.HackageSource+import Horizon.Spec.Types.HaskellPackage+import Horizon.Spec.Types.HaskellSource+import Horizon.Spec.Types.HorizonExport+import Horizon.Spec.Types.LocalSource+import Horizon.Spec.Types.Modifiers+import Horizon.Spec.Types.Name+import Horizon.Spec.Types.Overlay+import Horizon.Spec.Types.OverlayExportSettings+import Horizon.Spec.Types.OverlayFile+import Horizon.Spec.Types.PackageList+import Horizon.Spec.Types.PackagesDir+import Horizon.Spec.Types.PackageSet+import Horizon.Spec.Types.PackageSetExportSettings+import Horizon.Spec.Types.PackageSetFile+import Horizon.Spec.Types.Repo+import Horizon.Spec.Types.Revision+import Horizon.Spec.Types.Subdir+import Horizon.Spec.Types.TarballSource+import Horizon.Spec.Types.Url+import Horizon.Spec.Types.Version
+ src/Horizon/Spec/Types/CabalFlag.hs view
@@ -0,0 +1,13 @@+{-# LANGUAGE DeriveAnyClass #-}+module Horizon.Spec.Types.CabalFlag (CabalFlag(MkCabalFlag)) where++import Data.Kind (Type)+import Data.Text (Text)+import Dhall (FromDhall, Generic, ToDhall)+import Horizon.Spec.Types.Flag (Flag)++type CabalFlag :: Type+data CabalFlag where+ MkCabalFlag :: Flag Text -> CabalFlag+ deriving stock (Show, Eq, Generic)+ deriving anyclass (FromDhall, ToDhall)
+ src/Horizon/Spec/Types/Compiler.hs view
@@ -0,0 +1,11 @@+module Horizon.Spec.Types.Compiler (Compiler(MkCompiler), fromCompiler) where++import Data.Kind (Type)+import Data.String (IsString)+import Data.Text (Text)+import Dhall (FromDhall, ToDhall)++type Compiler :: Type+newtype Compiler = MkCompiler { fromCompiler :: Text }+ deriving stock (Eq, Show)+ deriving newtype (FromDhall, ToDhall, IsString)
+ src/Horizon/Spec/Types/Flag.hs view
@@ -0,0 +1,12 @@+{-# LANGUAGE DeriveAnyClass #-}+module Horizon.Spec.Types.Flag (Flag(Enable,Disable)) where++import Data.Kind (Type)+import Dhall (FromDhall, Generic, ToDhall)++type Flag :: Type -> Type+data Flag a where+ Enable :: a -> Flag a+ Disable :: a -> Flag a+ deriving stock (Show, Eq, Generic)+ deriving anyclass (FromDhall, ToDhall)
+ src/Horizon/Spec/Types/GitSource.hs view
@@ -0,0 +1,14 @@+{-# LANGUAGE DeriveAnyClass #-}+module Horizon.Spec.Types.GitSource (GitSource(MkGitSource), url, revision, subdir) where++import Data.Kind (Type)+import Dhall (FromDhall, Generic, ToDhall)+import Horizon.Spec.Types.Repo (Repo)+import Horizon.Spec.Types.Revision (Revision)+import Horizon.Spec.Types.Subdir (Subdir)++type GitSource :: Type+data GitSource where+ MkGitSource :: { url :: Repo, revision :: Revision, subdir :: Maybe Subdir } -> GitSource+ deriving stock (Eq, Show, Generic)+ deriving anyclass (FromDhall, ToDhall)
+ src/Horizon/Spec/Types/HackageSource.hs view
@@ -0,0 +1,13 @@+{-# LANGUAGE DeriveAnyClass #-}+module Horizon.Spec.Types.HackageSource (HackageSource(MkHackageSource), name, version) where++import Data.Kind (Type)+import Dhall (FromDhall, Generic, ToDhall)+import Horizon.Spec.Types.Name (Name)+import Horizon.Spec.Types.Version (Version)++type HackageSource :: Type+data HackageSource where+ MkHackageSource :: { name :: Name, version :: Version } -> HackageSource+ deriving stock (Eq, Show, Generic)+ deriving anyclass (FromDhall, ToDhall)
+ src/Horizon/Spec/Types/HaskellPackage.hs view
@@ -0,0 +1,25 @@+{-# LANGUAGE DeriveAnyClass #-}+module Horizon.Spec.Types.HaskellPackage+ ( HaskellPackage(MkHaskellPackage)+ , source+ , modifiers+ , flags+ , mkHaskellPackage+ ) where++import Data.Kind (Type)+import Dhall (FromDhall, Generic, ToDhall)+import Horizon.Spec.Types.CabalFlag (CabalFlag)+import Horizon.Spec.Types.HaskellSource (HaskellSource)+import Horizon.Spec.Types.Modifiers (Modifiers, defaultModifiers)++type HaskellPackage :: Type+data HaskellPackage where+ MkHaskellPackage :: { source :: HaskellSource+ , modifiers :: Modifiers+ , flags :: [CabalFlag] } -> HaskellPackage+ deriving stock (Show, Eq, Generic)+ deriving anyclass (FromDhall, ToDhall)++mkHaskellPackage :: HaskellSource -> HaskellPackage+mkHaskellPackage x = MkHaskellPackage { source = x, flags = [], modifiers = defaultModifiers }
+ src/Horizon/Spec/Types/HaskellSource.hs view
@@ -0,0 +1,19 @@+{-# LANGUAGE DeriveAnyClass #-}++module Horizon.Spec.Types.HaskellSource (HaskellSource(FromGit, FromHackage, FromTarball, FromLocal)) where++import Data.Kind (Type)+import Dhall (FromDhall, Generic, ToDhall)+import Horizon.Spec.Types.GitSource (GitSource)+import Horizon.Spec.Types.HackageSource (HackageSource)+import Horizon.Spec.Types.LocalSource (LocalSource)+import Horizon.Spec.Types.TarballSource (TarballSource)++type HaskellSource :: Type+data HaskellSource where+ FromGit :: GitSource -> HaskellSource+ FromHackage :: HackageSource -> HaskellSource+ FromLocal :: LocalSource -> HaskellSource+ FromTarball :: TarballSource -> HaskellSource+ deriving stock (Show, Eq, Generic)+ deriving anyclass (FromDhall, ToDhall)
+ src/Horizon/Spec/Types/HorizonExport.hs view
@@ -0,0 +1,15 @@+{-# LANGUAGE DeriveAnyClass #-}+module Horizon.Spec.Types.HorizonExport (HorizonExport(MakePackageSet, MakeOverlay)) where++import Data.Kind (Type)+import Dhall (FromDhall,+ Generic, ToDhall)+import Horizon.Spec.Types.OverlayExportSettings (OverlayExportSettings)+import Horizon.Spec.Types.PackageSetExportSettings (PackageSetExportSettings)++type HorizonExport :: Type+data HorizonExport where+ MakePackageSet :: PackageSetExportSettings -> HorizonExport+ MakeOverlay :: OverlayExportSettings -> HorizonExport+ deriving stock (Show, Eq, Generic)+ deriving anyclass (FromDhall, ToDhall)
+ src/Horizon/Spec/Types/LocalSource.hs view
@@ -0,0 +1,12 @@+module Horizon.Spec.Types.LocalSource (LocalSource(MkLocalSource), fromLocalSource) where++import Data.Kind (Type)+import Dhall (FromDhall, ToDhall)+import Horizon.Spec.Types.Subdir (Subdir)+++type LocalSource :: Type+newtype LocalSource where+ MkLocalSource :: { fromLocalSource :: Subdir } -> LocalSource+ deriving stock (Eq, Show)+ deriving newtype (FromDhall, ToDhall)
+ src/Horizon/Spec/Types/Modifiers.hs view
@@ -0,0 +1,40 @@+{-# LANGUAGE DeriveAnyClass #-}+module Horizon.Spec.Types.Modifiers+ ( Modifiers(MkModifiers)+ , doBenchmark+ , doCheck+ , doJailbreak+ , enableProfiling+ , includeBenchmarks+ , includeExecutables+ , includeTests+ , defaultModifiers+ ) where++import Data.Kind (Type)+import Dhall (FromDhall, Generic, ToDhall)+++type Modifiers :: Type+data Modifiers where+ MkModifiers :: { doBenchmark :: Bool+ , doCheck :: Bool+ , doJailbreak :: Bool+ , enableProfiling :: Bool+ , includeBenchmarks :: Bool+ , includeExecutables :: Bool+ , includeTests :: Bool } -> Modifiers+ deriving stock (Show, Eq, Generic)+ deriving anyclass (FromDhall, ToDhall)+++defaultModifiers :: Modifiers+defaultModifiers = MkModifiers+ { doBenchmark = False+ , doCheck = False+ , doJailbreak = True+ , enableProfiling = True+ , includeBenchmarks = True+ , includeExecutables = True+ , includeTests = True+ }
+ src/Horizon/Spec/Types/Name.hs view
@@ -0,0 +1,11 @@+module Horizon.Spec.Types.Name (Name(MkName), fromName) where++import Data.Kind (Type)+import Data.String (IsString)+import Data.Text (Text)+import Dhall (FromDhall, ToDhall)++type Name :: Type+newtype Name = MkName { fromName :: Text }+ deriving stock (Eq, Show, Ord)+ deriving newtype (FromDhall, ToDhall, IsString)
+ src/Horizon/Spec/Types/Overlay.hs view
@@ -0,0 +1,11 @@+module Horizon.Spec.Types.Overlay (Overlay(MkOverlay), fromOverlay) where++import Data.Kind (Type)+import Dhall (FromDhall, Generic, ToDhall)+import Horizon.Spec.Types.PackageSet (PackageSet)++type Overlay :: Type+newtype Overlay where+ MkOverlay :: { fromOverlay :: PackageSet } -> Overlay+ deriving stock (Show, Eq, Generic)+ deriving newtype (FromDhall, ToDhall)
+ src/Horizon/Spec/Types/OverlayExportSettings.hs view
@@ -0,0 +1,16 @@+{-# LANGUAGE DeriveAnyClass #-}+module Horizon.Spec.Types.OverlayExportSettings (OverlayExportSettings(MkOverlayExportSettings), packagesDir, overlayFile, overlay) where++import Data.Kind (Type)+import Dhall (FromDhall, Generic, ToDhall)+import Horizon.Spec.Types.Overlay (Overlay)+import Horizon.Spec.Types.OverlayFile (OverlayFile)+import Horizon.Spec.Types.PackagesDir (PackagesDir)++type OverlayExportSettings :: Type+data OverlayExportSettings where+ MkOverlayExportSettings :: { packagesDir :: PackagesDir+ , overlayFile :: OverlayFile+ , overlay :: Overlay } -> OverlayExportSettings+ deriving stock (Show, Eq, Generic)+ deriving anyclass (FromDhall, ToDhall)
+ src/Horizon/Spec/Types/OverlayFile.hs view
@@ -0,0 +1,20 @@+{-# 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
+ src/Horizon/Spec/Types/PackageList.hs view
@@ -0,0 +1,13 @@+module Horizon.Spec.Types.PackageList (PackageList(MkPackageList), fromPackageList) where++import Data.Kind (Type)+import Data.Map (Map)+import Dhall (FromDhall, Generic, ToDhall)+import Horizon.Spec.Types.HaskellPackage (HaskellPackage)+import Horizon.Spec.Types.Name (Name)++type PackageList :: Type+newtype PackageList where+ MkPackageList :: { fromPackageList :: Map Name HaskellPackage } -> PackageList+ deriving stock (Show, Eq, Generic)+ deriving newtype (FromDhall, ToDhall)
+ src/Horizon/Spec/Types/PackageSet.hs view
@@ -0,0 +1,14 @@+{-# LANGUAGE DeriveAnyClass #-}+module Horizon.Spec.Types.PackageSet (PackageSet(MkPackageSet), compiler, packages) where++import Data.Kind (Type)+import Dhall (FromDhall, Generic, ToDhall)+import Horizon.Spec.Types.Compiler (Compiler)+import Horizon.Spec.Types.PackageList (PackageList)++type PackageSet :: Type+data PackageSet where+ MkPackageSet :: { compiler :: Compiler+ , packages :: PackageList } -> PackageSet+ deriving stock (Show, Eq, Generic)+ deriving anyclass (FromDhall, ToDhall)
+ src/Horizon/Spec/Types/PackageSetExportSettings.hs view
@@ -0,0 +1,16 @@+{-# LANGUAGE DeriveAnyClass #-}+module Horizon.Spec.Types.PackageSetExportSettings (PackageSetExportSettings(MkPackageSetExportSettings), packagesDir, packageSetFile, packageSet) where++import Data.Kind (Type)+import Dhall (FromDhall, Generic, ToDhall)+import Horizon.Spec.Types.PackagesDir (PackagesDir)+import Horizon.Spec.Types.PackageSet (PackageSet)+import Horizon.Spec.Types.PackageSetFile (PackageSetFile)++type PackageSetExportSettings :: Type+data PackageSetExportSettings where+ MkPackageSetExportSettings :: { packagesDir :: PackagesDir+ , packageSetFile :: PackageSetFile+ , packageSet :: PackageSet } -> PackageSetExportSettings+ deriving stock (Show, Eq, Generic)+ deriving anyclass (FromDhall, ToDhall)
+ src/Horizon/Spec/Types/PackageSetFile.hs view
@@ -0,0 +1,19 @@+{-# LANGUAGE TemplateHaskell #-}+module Horizon.Spec.Types.PackageSetFile (PackageSetFile(MkPackageSetFile), fromPackageSetFile, mkPackageSetFile) 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 PackageSetFile :: Type+newtype PackageSetFile = MkPackageSetFile { fromPackageSetFile :: Path Rel File }+ deriving stock (Eq, Show)+ deriving newtype (FromDhall, ToDhall)++$(deriveLift 'MkPackageSetFile)++mkPackageSetFile :: FilePath -> Q Exp+mkPackageSetFile = either (error . show) (lift . MkPackageSetFile) . parseRelFile
+ src/Horizon/Spec/Types/PackagesDir.hs view
@@ -0,0 +1,19 @@+{-# 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
+ src/Horizon/Spec/Types/Repo.hs view
@@ -0,0 +1,11 @@+module Horizon.Spec.Types.Repo (Repo(MkRepo), fromRepo) where++import Data.Kind (Type)+import Data.String (IsString)+import Dhall (FromDhall, ToDhall)+import Horizon.Spec.Types.Url (Url)++type Repo :: Type+newtype Repo = MkRepo { fromRepo :: Url }+ deriving stock (Eq, Show)+ deriving newtype (FromDhall, ToDhall, IsString)
+ src/Horizon/Spec/Types/Revision.hs view
@@ -0,0 +1,11 @@+module Horizon.Spec.Types.Revision (Revision(MkRevision), fromRevision) where++import Data.Kind (Type)+import Data.String (IsString)+import Data.Text (Text)+import Dhall (FromDhall, ToDhall)++type Revision :: Type+newtype Revision = MkRevision { fromRevision :: Text }+ deriving stock (Eq, Show)+ deriving newtype (FromDhall, ToDhall, IsString)
+ src/Horizon/Spec/Types/Subdir.hs view
@@ -0,0 +1,19 @@+{-# LANGUAGE TemplateHaskell #-}+module Horizon.Spec.Types.Subdir (Subdir(MkSubdir), fromSubdir, mkSubdir) 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 Subdir :: Type+newtype Subdir = MkSubdir { fromSubdir :: Path Rel Dir }+ deriving stock (Eq, Show)+ deriving newtype (FromDhall, ToDhall)++$(deriveLift 'MkSubdir)++mkSubdir :: FilePath -> Q Exp+mkSubdir = either (error . show) (lift . MkSubdir) . parseRelDir
+ src/Horizon/Spec/Types/TarballSource.hs view
@@ -0,0 +1,12 @@+module Horizon.Spec.Types.TarballSource (TarballSource(MkTarballSource), fromTarballSource) where++import Data.Kind (Type)+import Dhall (FromDhall, Generic, ToDhall)+import Horizon.Spec.Types.Url (Url)+++type TarballSource :: Type+newtype TarballSource where+ MkTarballSource :: { fromTarballSource :: Url } -> TarballSource+ deriving stock (Eq, Show, Generic)+ deriving newtype (FromDhall, ToDhall)
+ src/Horizon/Spec/Types/Url.hs view
@@ -0,0 +1,11 @@+module Horizon.Spec.Types.Url (Url(MkUrl), fromUrl) where++import Data.Kind (Type)+import Data.String (IsString)+import Data.Text (Text)+import Dhall (FromDhall, ToDhall)++type Url :: Type+newtype Url = MkUrl { fromUrl :: Text }+ deriving stock (Eq, Show)+ deriving newtype (FromDhall, ToDhall, IsString)
+ src/Horizon/Spec/Types/Version.hs view
@@ -0,0 +1,11 @@+module Horizon.Spec.Types.Version (Version(MkVersion), fromVersion) where++import Data.Kind (Type)+import Data.String (IsString)+import Data.Text (Text)+import Dhall (FromDhall, ToDhall)++type Version :: Type+newtype Version = MkVersion { fromVersion :: Text }+ deriving stock (Eq, Show)+ deriving newtype (FromDhall, ToDhall, IsString)
+ src/Horizon/Spec/Utils.hs view
@@ -0,0 +1,31 @@+module Horizon.Spec.Utils+ ( callHackage+ , callGit+ , callTarball+ , callLocal) where++import Horizon.Spec.Types.GitSource (GitSource (MkGitSource))+import Horizon.Spec.Types.HackageSource (HackageSource (MkHackageSource))+import Horizon.Spec.Types.HaskellPackage (HaskellPackage,+ mkHaskellPackage)+import Horizon.Spec.Types.HaskellSource (HaskellSource (FromGit, FromHackage, FromLocal, FromTarball))+import Horizon.Spec.Types.LocalSource (LocalSource (MkLocalSource))+import Horizon.Spec.Types.Name (Name)+import Horizon.Spec.Types.Repo (Repo)+import Horizon.Spec.Types.Revision (Revision)+import Horizon.Spec.Types.Subdir (Subdir)+import Horizon.Spec.Types.TarballSource (TarballSource (MkTarballSource))+import Horizon.Spec.Types.Url (Url)+import Horizon.Spec.Types.Version (Version)++callHackage :: Name -> Version -> HaskellPackage+callHackage n = mkHaskellPackage . FromHackage . MkHackageSource n++callGit :: Repo -> Revision -> Maybe Subdir -> HaskellPackage+callGit u x d = mkHaskellPackage . FromGit $ MkGitSource u x d++callTarball :: Url -> HaskellPackage+callTarball = mkHaskellPackage . FromTarball . MkTarballSource++callLocal :: Subdir -> HaskellPackage+callLocal = mkHaskellPackage . FromLocal . MkLocalSource