packages feed

horizon-spec 0.6.3 → 0.6.4

raw patch · 29 files changed

+509/−209 lines, 29 files

Files

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