horizon-spec-0.6: src/Horizon/Spec.hs
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DuplicateRecordFields #-}
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(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)
, TarballSource(MkTarballSource, fromTarballSource)
, Url(MkUrl, fromUrl)
, Version (MkVersion, fromVersion)
)
where
import Data.Kind (Type)
import Data.Map (Map)
import Data.Text (Text)
import Dhall (FromDhall, Generic, ToDhall)
import Path (Dir, File, Path, Rel)
import Path.Dhall ()
type Url :: Type
newtype Url = MkUrl { fromUrl :: Text }
deriving stock (Eq, Show)
deriving newtype (FromDhall, ToDhall)
type Repo :: Type
newtype Repo = MkRepo { fromRepo :: Url }
deriving stock (Eq, Show)
deriving newtype (FromDhall, ToDhall)
type Subdir :: Type
newtype Subdir = MkSubdir { fromSubdir :: Path Rel Dir }
deriving stock (Eq, Show)
deriving newtype (FromDhall, ToDhall)
type Name :: Type
newtype Name = MkName { fromName :: Text }
deriving stock (Eq, Ord, Show)
deriving newtype (FromDhall, ToDhall)
type Version :: Type
newtype Version = MkVersion { fromVersion :: Text }
deriving stock (Eq, Show)
deriving newtype (FromDhall, ToDhall)
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)
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)