packages feed

horizon-spec-0.6: dhall/package.dhall

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 = Text

let Revision = Text

let Subdir = Text

let Url = Text

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

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 Flag
    : ∀(x : Type) → Type
    = λ(x : Type) → < Enable : x | Disable : x >

let CabalFlag = Flag Text

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

let Compiler = Text

let PackageEntry = Attr HaskellPackage.Type

let PackageList = List PackageEntry

let PackageSet = { compiler : Compiler, 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
    : Name → Version → HaskellPackage.Type
    = λ(name : Name) →
      λ(version : Version) →
        HaskellPackage::{ source = HaskellSource.FromHackage { name, version } }

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

let callLocal
    : Subdir → HaskellPackage.Type
    = λ(subdir : Subdir) →
        HaskellPackage::{ source = HaskellSource.FromLocal subdir }

let callTarball
    : Url → HaskellPackage.Type
    = λ(url : Url) → HaskellPackage::{ source = HaskellSource.FromTarball url }

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

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

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