A build tool for ATS

Latest on Hackage:

This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow to host generated Haddocks.

BSD-3-Clause licensed by Vanessa McHale
Maintained by


Build Status Windows build status Hackage CI Hackage Dependencies of latest version on Hackage

This is a build system for ATS written in Haskell and configured with Dhall. It is not fully working, but the configuration format is now stable.

atspkg works quite well as a build system, and acceptably well as a package manager.

Features & Non-Features

Things that atspkg will do for you:

  • Dramatically simplify CI for ATS projects
  • Simplify distribution of your project
  • Enable Haskell builds that depend on ATS code
  • Enable ATS builds that depend on Haskell code
  • Track all file dependencies
  • Make contributing to your projects easier
  • Run builds in parallel (like make)
  • Install patscc and other ATS tooling
  • Install manual pages and shell completions
  • Install ATS libraries
  • Dependency resolution

Things that atspkg will not do for you:

  • Give you the full flexibility of the C/ATS ecosystem
  • Integrate with other ecosystems
  • Provide a centralized package repository
  • Cache builds (like nix or cabal new-build)


As an example, the following will install polyglot:

atspkg remote

As you can see, this greatly simplifies distribution and testing of programs written in ATS.



The easiest way to install is via a script, viz.

curl -sSl | sh -s

Thereafter, you can run

atspkg upgrade

to upgrade to the latest release.


If that doesn’t work, you can download Cabal and GHC and install with

cabal update
cabal new-install ats-pkg --symlink-bindir ~/.local/bin --happy-options='-gcsa' --alex-options='-g'

Note that $HOME/.local/bin will need to be on your PATH.

Quick Start

Install pi with

curl -LSfs | sh -s -- --git vmchale/project-init

Initialize an ATS project with

pi new ats project

Then build & run it:

cd project
atspkg run


You can find several examples with explanation here.

Global Configuration

atspkg is configured via a file in $HOME/.config/atspkg/config.dhall. You can set a custom package set as follows:

let version = "master"

let cfg =
  { defaultPkgs = "${version}/ats-pkg/pkgs/pkg-set.dhall"
  , path = ([] : Optional Text)
  , githubUsername = "vmchale"
  , filterErrors = False
in cfg

I recommend setting version to whichever branch your version of atspkg was built from.



  • Use old Dhall prelude

  • Set UTF8 encoding in all cases

  • Use better URL

  • Use libarchive instead of tar
  • Change URL for compilers
  • Remove hidden pack command
  • Remove packageCompiler function
  • Update latest Dhall libraries

  • Bump Dhall libraries again

  • Bump Dhall libraries for new default compiler

  • Fix bug where gc version could not be constrained
  • Slightly improved behavior around C package versioning (allow package reinstalls)

  • Update .dhall files

  • Update to use cpphs again

  • Update to not use cpphs

  • Fix dhall/atslib.dhall file that is embedded into the binary

  • Update Debian type and adjust prelude accordingly
  • Allow Debian packages built to include header files and libraries.
  • Bug fixes related to Debian packaging.

  • Update Dhall prelude

Bug Fixes:

  • Don’t default to 4 processors
  • Use getAppUserDirectory for better portability

Breaking Changes:

  • Only build C sources when sensible to do so
comments powered byDisqus