/horizon-spec-0.11.0/package.dhall

Copy path to clipboard

Source

let Prelude =
env:DHALL_PRELUDE
? https://raw.githubusercontent.com/dhall-lang/dhall-lang/v21.1.0/Prelude/package.dhall sha256:0fed19a88330e9a8a3fbe1e8442aa11d12e38da51eb12ba8bcb56f3c25d0854a

let FilePath = Text

let Directory = Text

let Name = Text

let Version = List Natural

let Revision = Text

let Subdir = Text

let Url = Text

let HaskellSource =
< FromHackage : { name : Name, version : Version }
| FromGit : { url : Url, revision : Revision, subdir : Optional Subdir }
| FromTarball : { url : Url, subdir : Optional Subdir }
>

let Modifiers =
{ Type =
{ doBenchmark : Bool
, doCheck : Bool
, doJailbreak : Bool
, enableProfiling : Bool
, includeBenchmarks : Bool
, includeExecutables : Bool
, includeTests : Bool
}
, default =
{ doBenchmark = False
, doCheck = False
, doJailbreak = True
, enableProfiling = True
, includeBenchmarks = True
, includeExecutables = True
, includeTests = True
}
}

let Attr = λ(a : Type) → { mapKey : Text, mapValue : a }

let Policy = < Keep | Pin >

let Flag
: ∀(x : Type) → Type
= λ(x : Type) → < Disable : x | Enable : x >

let CabalFlag = Flag Text

let HaskellPackage =
{ Type =
{ source : HaskellSource
, modifiers : Modifiers.Type
, policy : List Policy
, flags : List CabalFlag
}
, default =
{ modifiers = Modifiers.default
, flags = [] : List CabalFlag
, policy = [] : List Policy
}
}

let PackageEntry = Attr HaskellPackage.Type

let PackageList = List PackageEntry

let PackageSet = { ghcVersion : Version, packages : PackageList }

let Overlay = PackageSet

let PackageSetExportSettings =
{ packagesDir : Directory
, packageSetFile : FilePath
, packageSet : PackageSet
}

let OverlayExportSettings =
{ packagesDir : Directory, overlayFile : FilePath, overlay : Overlay }

let HorizonExport =
< MakePackageSet : PackageSetExportSettings
| MakeOverlay : OverlayExportSettings
>

let callHackage
: NameVersionHaskellPackage.Type
= λ(name : Name) →
λ(version : Version) →
HaskellPackage::{ source = HaskellSource.FromHackage { name, version } }

let callGit
: UrlRevision → Optional SubdirHaskellPackage.Type
= λ(url : Url) →
λ(revision : Revision) →
λ(subdir : Optional Subdir) →
HaskellPackage::{
, source = HaskellSource.FromGit { url, revision, subdir }
}

let callTarball
: Url → Optional SubdirHaskellPackage.Type
= λ(url : Url) →
λ(subdir : Optional Subdir) →
HaskellPackage::{ source = HaskellSource.FromTarball { url, subdir } }

let Version/show
: Version → Text
= λ(version : Version) →
Prelude.Text.concatMapSep "." Natural Prelude.Natural.show version

let callHorizonGitlab
: NameVersion → Optional SubdirHaskellPackage.Type
= λ(name : Name) →
λ(version : Version) →
λ(subdir : Optional Subdir) →
callTarball
( Prelude.Text.concat
[ "https://gitlab.horizon-haskell.net/haskell/"
, name
, "/-/archive/"
, Version/show version
, "/"
, name
, "-"
, Version/show version
, ".tar.gz"
]
)
subdir

let modPackageList
: Modifiers.TypePackageListPackageList
= λ(xs : Modifiers.Type) →
λ(ps : PackageList) →
Prelude.List.map
PackageEntry
PackageEntry
(λ(x : PackageEntry) → x with mapValue.modifiers = xs)
ps

let modPackageSet
: Modifiers.TypePackageSetPackageSet
= λ(xs : Modifiers.Type) →
λ(ps : PackageSet) →
ps
with packages = modPackageList xs ps.packages

in { Attr
, CabalFlag
, Directory
, FilePath
, Flag
, HaskellSource
, HaskellPackage
, HorizonExport
, Modifiers
, Name
, OverlayExportSettings
, Overlay
, PackageEntry
, PackageList
, PackageSetExportSettings
, PackageSet
, Policy
, Revision
, Subdir
, Version
, Url
, callGit
, callHackage
, callTarball
, callHorizonGitlab
, modPackageList
, modPackageSet
}