From 6eb306cfd085c2d7aab031bbc3399b49e93a7ec7 Mon Sep 17 00:00:00 2001 From: Lennart Spitzner Date: Mon, 28 Sep 2020 10:49:24 +0200 Subject: [PATCH] Switch to new seaaye setup --- .gitignore | 4 ++ nix/.gitignore | 3 - nix/README.md | 32 ---------- nix/all.nix | 103 ------------------------------ nix/ci.sh | 50 --------------- nix/create-roots.sh | 25 -------- nix/via-hackage.nix | 61 ------------------ nix/via-stackage.nix | 92 -------------------------- seaaye.nix | 54 ++++++++++++++++ stack-8.8.yaml => stack-8-10.yaml | 2 +- stack-8.4.yaml => stack-8-4.yaml | 0 stack-8.6.yaml => stack-8-6.yaml | 0 stack-8-8.yaml | 66 +++++++++++++++++++ stack-8-8_.yaml | 100 +++++++++++++++++++++++++++++ 14 files changed, 225 insertions(+), 367 deletions(-) delete mode 100644 nix/.gitignore delete mode 100644 nix/README.md delete mode 100644 nix/all.nix delete mode 100755 nix/ci.sh delete mode 100755 nix/create-roots.sh delete mode 100644 nix/via-hackage.nix delete mode 100644 nix/via-stackage.nix create mode 100644 seaaye.nix rename stack-8.8.yaml => stack-8-10.yaml (99%) rename stack-8.4.yaml => stack-8-4.yaml (100%) rename stack-8.6.yaml => stack-8-6.yaml (100%) create mode 100644 stack-8-8.yaml create mode 100644 stack-8-8_.yaml diff --git a/.gitignore b/.gitignore index de26cfe..09e3740 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,7 @@ cabal.sandbox.config \#*.gui\# cabal.project.local .ghc.environment.* +/result* +/nix/seaaye-cache +/nix/gcroots +/nix/ci-out diff --git a/nix/.gitignore b/nix/.gitignore deleted file mode 100644 index 413cb59..0000000 --- a/nix/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -nixpkgs.nix -local-extra-deps.nix -gcroots diff --git a/nix/README.md b/nix/README.md deleted file mode 100644 index 2b962a0..0000000 --- a/nix/README.md +++ /dev/null @@ -1,32 +0,0 @@ - -This nix setup expects the iohk haskell-nix overlay to be available/included -when importing ``. Also, you might need a specific commit if you -want to test against all supported ghcs (8.4 - 8.10, currently). - -# Useful commands: - -~~~~.sh -# enter a shell for a specific build-plan -# (cabal-solved with ghc-8.4 in this case) -nix-shell nix/all.nix -A '"hackage-8.4".shell' -# run tests against ghcs 8.4 through 8.10, both against hackage and stackage package sets -nix/ci.sh -~~~~ - - -# Files in this directory: - -all.nix - main entrypoint into this package's nix world -via-hackage.nix - how to build this via cabal-solved package-set -via-stackage.nix - how to build via stackage-based package set -nixpkgs.nix - optional - if you want to use a custom nixpkgs channel - (the replacement needs to have haskell-nix overlay _and_ - the cabal-check feature enabled though!) -local-extra-deps.nix - optional - for defining local addition deps for - dev testing - -(plus some currently unused:) - -materialized - materializations of cabal-solved build-plans -plan.nix - manual materialization of unsolved build-plan (used with - stackage snapshot to build package set) diff --git a/nix/all.nix b/nix/all.nix deleted file mode 100644 index d75883a..0000000 --- a/nix/all.nix +++ /dev/null @@ -1,103 +0,0 @@ -let - importOrElse = maybePath: otherwise: - if builtins.pathExists maybePath then import maybePath else otherwise; - pkgs = importOrElse ./nixpkgs.nix - ( let - haskellNix = import ( - builtins.fetchTarball - https://github.com/lspitzner/haskell.nix/archive/1873ab6de8f5a072d5405c8803f55b2fb386988f.tar.gz - ) { version = 2; }; - nixpkgsSrc = haskellNix.sources.nixpkgs-2003; - in - import nixpkgsSrc haskellNix.nixpkgsArgs - ); - gitignoreSrc = pkgs.fetchFromGitHub { - owner = "hercules-ci"; - repo = "gitignore.nix"; - rev = "c4662e662462e7bf3c2a968483478a665d00e717"; - sha256 = "sha256:1npnx0h6bd0d7ql93ka7azhj40zgjp815fw2r6smg8ch9p7mzdlx"; - }; - inherit (import gitignoreSrc { inherit (pkgs) lib; }) gitignoreSource gitignoreFilter; - cleanedSource = pkgs.lib.cleanSourceWith { - name = "butcher"; - src = ./..; - filter = p: t: - let baseName = baseNameOf (toString p); - in gitignoreFilter ./.. p t - && baseName != ".gitignore" - && baseName != "nix" - && baseName != "shell.nix" - && baseName != "default.nix"; - }; - localExtraDeps = importOrElse ./local-extra-deps.nix (_: []) {inherit pkgs;}; - args = { - inherit pkgs; - inherit cleanedSource; - pkg-def-extras = localExtraDeps; - }; - inherit (builtins) hasAttr; -in -assert pkgs.lib.assertMsg (hasAttr "haskell-nix" pkgs) "need iohk haskell-nix overlay!"; -let - versions = { - # "stack-8.0" = import ./via-stack.nix (args // { resolver = "lts-9.21"; }); - # "stack-8.2" = import ./via-stack.nix (args // { resolver = "lts-11.22"; }); - "stackage-8.4" = import ./via-stackage.nix (args // { - # resolver = "lts-12.26"; - stackFile = "stack-8.4.yaml"; - ghc-ver = "ghc844"; - }); - "stackage-8.6" = import ./via-stackage.nix (args // { - # resolver = "lts-14.27"; - stackFile = "stack-8.6.yaml"; - ghc-ver = "ghc865"; - }); - "stackage-8.8" = import ./via-stackage.nix (args // { - # resolver = "lts-15.12"; - stackFile = "stack-8.8.yaml"; - ghc-ver = "ghc883"; - }); - "hackage-8.4" = import ./via-hackage.nix (args // { - ghc-ver = "ghc844"; - index-state = "2020-05-01T00:00:00Z"; - # plan-sha256 = "0s6rfanb6zxhr5zbinp7h25ahwasciwj3ambsr6zdxm1l782b3ap"; - # materialized = ./materialized/hackage-8.4; - configureArgs = "--allow-newer='multistate:*'"; - }); - "hackage-8.6" = import ./via-hackage.nix (args // { - ghc-ver = "ghc865"; - index-state = "2020-05-01T00:00:00Z"; - # plan-sha256 = "01m95xirrh00dvdxrpsx8flhcwlwcvgr3diwlnkw7lj5f3i7rfrl"; - # materialized = ./materialized/hackage-8.6; - configureArgs = "--allow-newer='multistate:*'"; - }); - "hackage-8.8" = import ./via-hackage.nix (args // { - ghc-ver = "ghc883"; - index-state = "2020-05-01T00:00:00Z"; - # plan-sha256 = "14qs7ynlf7p2qvdk8sf498y87ss5vab3ylnbpc8sacqbpv2hv4pf"; - # materialized = ./materialized/hackage-8.8; - configureArgs = "--allow-newer='multistate:*'"; - }); - } // (if hasAttr "ghc8101" pkgs.haskell-nix.compiler - then { - "hackage-8.10" = import ./via-hackage.nix (args // { - ghc-ver = "ghc8101"; - index-state = "2020-06-06T00:00:00Z"; - # index-sha256 = "1h1x65840jl6w2qvyq9csc7b3ivadr933glarnmydk2b23vw2i77"; - # plan-sha256 = "1s8a6cb5qgf4ky5s750rzx6aa52slp1skazh8kbx0dbfjd6df7yw"; - # materialized = ./materialized/hackage-8.10; - configureArgs = "--allow-newer='multistate:*' --constraint 'splitmix<0.1'"; - }); - } else builtins.trace "warn: ghc 8.10 is not avaiable, will not be tested!" {} - ); -in -versions // { - inherit cleanedSource; - default = versions."stackage-8.8"; - roots = pkgs.linkFarm "haskell-nix-roots" - [ { name = "haskell-nix-roots-ghc844" ; path = pkgs.haskell-nix.roots "ghc844"; } - { name = "haskell-nix-roots-ghc865" ; path = pkgs.haskell-nix.roots "ghc865"; } - { name = "haskell-nix-roots-ghc883" ; path = pkgs.haskell-nix.roots "ghc883"; } - { name = "haskell-nix-roots-ghc8101"; path = pkgs.haskell-nix.roots "ghc8101"; } - ]; -} \ No newline at end of file diff --git a/nix/ci.sh b/nix/ci.sh deleted file mode 100755 index cbf3d21..0000000 --- a/nix/ci.sh +++ /dev/null @@ -1,50 +0,0 @@ - -OUTDIR="ci-out" -SUMMARY="$OUTDIR/0-summary" -CABAL_CHECK_ATTRPATH="hackage-8.10" - -set -x - -mkdir -p "$OUTDIR" -echo "# test summary" > "$SUMMARY" - -function build-one { - local ATTRPATH=$1 - # nix-build --no-out-link nix/all.nix -A "\"$ATTRPATH\".butcher.components.library"\ - # 2> >(tee "$OUTDIR/$ATTRPATH-1-build-lib.txt" >&2) - # (($? == 0)) || { echo "$ATTRPATH: build src failed" >> "$SUMMARY"; return 1; } - # nix-build --no-out-link nix/all.nix -A "\"$ATTRPATH\".butcher.components.tests"\ - # 2> >(tee "$OUTDIR/$ATTRPATH-2-build-test.txt" >&2) - # (($? == 0)) || { echo "$ATTRPATH: build test failed" >> "$SUMMARY"; return 1; } - OUT=$(nix-build -o "$OUTDIR/$ATTRPATH-test-result.txt" nix/all.nix -A "\"$ATTRPATH\".butcher.checks.tests"\ - 2> >(tee "$OUTDIR/$ATTRPATH-build.txt" >&2)) - (($? == 0)) || { echo "$ATTRPATH: run test failed" >> "$SUMMARY"; return 1; } - echo "$ATTRPATH: $(grep examples "$OUTDIR/$ATTRPATH-test-result.txt")" >> "$SUMMARY" -} - -function cabal-check { - nix-build --no-out-link nix/all.nix -A "\"$CABAL_CHECK_ATTRPATH\".checks.cabal-check"\ - 2> >(tee "$OUTDIR/cabal-check.txt" >&2) - (($? == 0)) || { echo "cabal-check: failed" >> "$SUMMARY"; return 1; } - echo "cabal-check: success" >> "$SUMMARY" -} - -find "$OUTDIR" -name "stackage*" -delete -find "$OUTDIR" -name "hackage*" -delete -rm "$OUTDIR/cabal-check.txt" -CLEANEDSOURCE=$(nix-instantiate --eval --read-write-mode nix/all.nix -A "cleanedSource.outPath") -(($? == 0)) || exit 1 -( eval "cd $CLEANEDSOURCE; find" ) > "$OUTDIR/1-cleanedSource.txt" - -build-one "stackage-8.4" -build-one "stackage-8.6" -build-one "stackage-8.8" - -build-one "hackage-8.4" -build-one "hackage-8.6" -build-one "hackage-8.8" -build-one "hackage-8.10" - -cabal-check - -cat "$SUMMARY" diff --git a/nix/create-roots.sh b/nix/create-roots.sh deleted file mode 100755 index 82e56d5..0000000 --- a/nix/create-roots.sh +++ /dev/null @@ -1,25 +0,0 @@ - -set -ex - -ROOTSDIR="nix/gcroots" - -function create-root { - local ATTRPATH=$1 - nix-build -o "${ROOTSDIR}/${ATTRPATH}-shell" nix/all.nix -A "\"$ATTRPATH\".shell" - nix-build -o "${ROOTSDIR}/${ATTRPATH}-test" nix/all.nix -A "\"$ATTRPATH\".butcher.components.tests.tests" - nix-build -o "${ROOTSDIR}/${ATTRPATH}-plan" nix/all.nix -A "\"$ATTRPATH\".butcher-plan" - nix-build -o "${ROOTSDIR}/${ATTRPATH}-nix" nix/all.nix -A "\"$ATTRPATH\".butcher-nix" || true -} - -mkdir -p "$ROOTSDIR" - -nix-build -o "${ROOTSDIR}/haskell-nix-roots" nix/all.nix -A "roots" - -create-root "stackage-8.4" -create-root "stackage-8.6" -create-root "stackage-8.8" - -create-root "hackage-8.4" -create-root "hackage-8.6" -create-root "hackage-8.8" -create-root "hackage-8.10" diff --git a/nix/via-hackage.nix b/nix/via-hackage.nix deleted file mode 100644 index cf0f8af..0000000 --- a/nix/via-hackage.nix +++ /dev/null @@ -1,61 +0,0 @@ -{ pkgs -, cleanedSource -, pkg-def-extras ? [] -, ghc-ver -, index-state -, index-sha256 ? null -, plan-sha256 ? null -, materialized ? null -, configureArgs ? "" -}: -let - butcher-nix = pkgs.haskell-nix.callCabalProjectToNix { - src = cleanedSource; - inherit index-state index-sha256 plan-sha256 materialized configureArgs; - # ghc = pkgs.haskell-nix.compiler.${ghc-ver}; - compiler-nix-name = ghc-ver; - }; - butcher-plan = pkgs.haskell-nix.importAndFilterProject { inherit (butcher-nix) projectNix sourceRepos src; }; -in rec { - inherit butcher-nix butcher-plan pkgs; - - hsPkgs = - let - in let pkg-set = pkgs.haskell-nix.mkCabalProjectPkgSet - { plan-pkgs = butcher-plan; - pkg-def-extras = pkg-def-extras; - modules = [ - { ghc.package = pkgs.haskell-nix.compiler.${ghc-ver}; } - ]; - }; - in pkg-set.config.hsPkgs; - - inherit (hsPkgs) butcher; - inherit (hsPkgs.butcher) checks; - shell = hsPkgs.shellFor { - # Include only the *local* packages of your project. - packages = ps: with ps; [ - butcher - ]; - - # Builds a Hoogle documentation index of all dependencies, - # and provides a "hoogle" command to search the index. - withHoogle = false; - - # You might want some extra tools in the shell (optional). - - # Some common tools can be added with the `tools` argument - # tools = { cabal = "3.2.0.0"; }; - # See overlays/tools.nix for more details - - tools = { ghcid = "0.8.7"; cabal = "3.2.0.0"; }; - - # Some you may need to get some other way. - buildInputs = with pkgs.haskellPackages; - [ bash pkgs.nix ]; - - # Prevents cabal from choosing alternate plans, so that - # *all* dependencies are provided by Nix. - exactDeps = true; - }; -} diff --git a/nix/via-stackage.nix b/nix/via-stackage.nix deleted file mode 100644 index bb8f2cc..0000000 --- a/nix/via-stackage.nix +++ /dev/null @@ -1,92 +0,0 @@ -{ pkgs -, ghc-ver -, cleanedSource -, stackFile -, pkg-def-extras ? [] -}: -let - # package-desc = import ./plan.nix; - # butcher-plan = { - # inherit resolver; - # extras = hackage: - # { butcher = args: package-desc args // { - # src = pkgs.haskell-nix.cleanSourceHaskell { - # src = pkgs.haskell-nix.haskellLib.cleanGit { src = ./..; name = "butcher"; }; - # name = "butcher"; - # }; - # }; - # }; - # }; - # this does not work at all, does not use local package (!) - # butcher-plan = (pkgs.haskell-nix.importAndFilterProject ( - # (pkgs.haskell-nix.callStackToNix { - # name = "butcher-plan"; - # src = ./..; - # stackYamlFile = builtins.toFile "stack.yaml" '' - # resolver: ${resolver} - # packages: - # - '.' - # extra-deps: [] - # extra-package-dbs: [] - # ''; - # ignorePackageYaml = true; - # }) - # )); - cleanedSource = pkgs.haskell-nix.cleanSourceHaskell { name = "butcher-"+stackFile; src = ./..; }; - butcher-nix = pkgs.haskell-nix.callStackToNix { - name = "butcher"; - src = cleanedSource; - stackYaml = stackFile; - }; - butcher-plan = pkgs.haskell-nix.importAndFilterProject butcher-nix; - # butcher-pkgs = { - # inherit (butcher-plan.pkgs) modules resolver; - # extras = butcher-plan.pkgs.extras ps; - # }; - generatedCache = pkgs.haskell-nix.genStackCache { - src = cleanedSource; - stackYaml = stackFile; - }; - hsPkgs = (pkgs.haskell-nix.mkStackPkgSet { - stack-pkgs = butcher-plan; - pkg-def-extras = pkg-def-extras; - modules = pkgs.lib.singleton (pkgs.haskell-nix.mkCacheModule generatedCache); - }).config.hsPkgs; -in { - inherit butcher-nix butcher-plan hsPkgs pkgs; - inherit (hsPkgs) butcher; - inherit (hsPkgs.butcher) checks; - shell = hsPkgs.shellFor { - # Include only the *local* packages of your project. - packages = ps: with ps; [ - butcher - ]; - - # Builds a Hoogle documentation index of all dependencies, - # and provides a "hoogle" command to search the index. - withHoogle = false; - - # You might want some extra tools in the shell (optional). - - # Some common tools can be added with the `tools` argument - # tools = { cabal = "3.2.0.0"; }; - # See overlays/tools.nix for more details - - tools = { ghcid = "0.8.7"; cabal = "3.2.0.0"; }; - - # Some you may need to get some other way. - buildInputs = with pkgs.haskellPackages; - [ bash pkgs.nix ]; - - # Prevents cabal from choosing alternate plans, so that - # *all* dependencies are provided by Nix. - exactDeps = true; - }; -} -# pkgs.haskell-nix.stackProject { -# src = pkgs.haskell-nix.haskellLib.cleanGit { src = ./.; name = "butcher"; }; -# pkg-def-extras = pkg-def-extras; -# modules = [ -# { doHaddock = false; } -# ]; -# } diff --git a/seaaye.nix b/seaaye.nix new file mode 100644 index 0000000..b654f29 --- /dev/null +++ b/seaaye.nix @@ -0,0 +1,54 @@ +{ seaaye-spec = 1; + haskell-nix-url = https://github.com/input-output-hk/haskell.nix/archive/506208fc9226e207a7beb1b4a26bbd9504a0f680.tar.gz; + haskell-nix-nixpkgs = "nixpkgs-2205"; + package-name = "butcher"; + targets = + { + hackage-8-06 = { + resolver = "hackage"; + index-state = "2022-07-01T00:00:00Z"; + ghc-ver = "ghc865"; + }; + hackage-8-08 = { + resolver = "hackage"; + index-state = "2022-07-01T00:00:00Z"; + ghc-ver = "ghc884"; + }; + hackage-8-10 = { + resolver = "hackage"; + index-state = "2022-07-01T00:00:00Z"; + ghc-ver = "ghc8107"; + }; + stackage-8-06 = { + resolver = "stackage"; + stackFile = "stack-8-6.yaml"; + ghc-ver = "ghc865"; + }; + stackage-8-08 = { + resolver = "stackage"; + stackFile = "stack-8-8.yaml"; + ghc-ver = "ghc884"; + }; + stackage-8-10 = { + resolver = "stackage"; + stackFile = "stack-8-10.yaml"; + ghc-ver = "ghc8107"; + }; + }; + module-flags = [ + # N.B.: There are haskell-nix module options. See the haskell-nix docs + # for details. Also, be careful about typos: In many cases you + # will not get errors but the typo'd flag will just not have any + # effect! + # { packages.my-package.flags.my-package-examples-examples = true; } + { packages.butcher.flags.butcher-examples = true; } + ]; + default-target = "hackage-8-06"; + do-check-hackage = "hackage.haskell.org"; + do-check-changelog = "changelog.md"; + cabal-project-local = '' + package butcher + flags: +butcher-examples + ''; + # local-config-path = ./seaaye-local.nix; +} diff --git a/stack-8.8.yaml b/stack-8-10.yaml similarity index 99% rename from stack-8.8.yaml rename to stack-8-10.yaml index 8f497d2..ec7e7e1 100644 --- a/stack-8.8.yaml +++ b/stack-8-10.yaml @@ -11,7 +11,7 @@ # # resolver: ./custom-snapshot.yaml # resolver: https://example.com/snapshots/2018-01-01.yaml -resolver: lts-15.12 +resolver: lts-18.13 # User packages to be built. # Various formats can be used as shown in the example below. diff --git a/stack-8.4.yaml b/stack-8-4.yaml similarity index 100% rename from stack-8.4.yaml rename to stack-8-4.yaml diff --git a/stack-8.6.yaml b/stack-8-6.yaml similarity index 100% rename from stack-8.6.yaml rename to stack-8-6.yaml diff --git a/stack-8-8.yaml b/stack-8-8.yaml new file mode 100644 index 0000000..566afe2 --- /dev/null +++ b/stack-8-8.yaml @@ -0,0 +1,66 @@ +# Resolver to choose a 'specific' stackage snapshot or a compiler version. +# A snapshot resolver dictates the compiler version and the set of packages +# to be used for project dependencies. For example: +# +# resolver: lts-3.5 +# resolver: nightly-2015-09-21 +# resolver: ghc-7.10.2 +# +# The location of a snapshot can be provided as a file or url. Stack assumes +# a snapshot provided as a file might change, whereas a url resource does not. +# +# resolver: ./custom-snapshot.yaml +# resolver: https://example.com/snapshots/2018-01-01.yaml +resolver: lts-16.31 + +# User packages to be built. +# Various formats can be used as shown in the example below. +# +# packages: +# - some-directory +# - https://example.com/foo/bar/baz-0.0.2.tar.gz +# subdirs: +# - auto-update +# - wai +packages: +- . +# The following packages have been ignored due to incompatibility with the +# resolver compiler, dependency conflicts with other packages +# or unsatisfied dependencies. +#- . + +# Dependency packages to be pulled from upstream that are not in the resolver. +# These entries can reference officially published versions as well as +# forks / in-progress versions pinned to a git hash. For example: +# +# extra-deps: +# - acme-missiles-0.3 +# - git: https://github.com/commercialhaskell/stack.git +# commit: e7b331f14bcffb8367cd58fbfc8b40ec7642100a +# +extra-deps: + - barbies-2.0.2.0 + +# Override default flag values for local packages and extra-deps +# flags: {} + +# Extra package databases containing global packages +# extra-package-dbs: [] + +# Control whether we use the GHC we find on the path +# system-ghc: true +# +# Require a specific version of stack, using version ranges +# require-stack-version: -any # Default +# require-stack-version: ">=2.1" +# +# Override the architecture used by stack, especially useful on Windows +# arch: i386 +# arch: x86_64 +# +# Extra directories used by stack for building +# extra-include-dirs: [/path/to/dir] +# extra-lib-dirs: [/path/to/dir] +# +# Allow a newer minor version of GHC than the snapshot specifies +# compiler-check: newer-minor diff --git a/stack-8-8_.yaml b/stack-8-8_.yaml new file mode 100644 index 0000000..19cf320 --- /dev/null +++ b/stack-8-8_.yaml @@ -0,0 +1,100 @@ +# This file was automatically generated by 'stack init' +# +# Some commonly used options have been documented as comments in this file. +# For advanced use and comprehensive documentation of the format, please see: +# https://docs.haskellstack.org/en/stable/yaml_configuration/ + +# Resolver to choose a 'specific' stackage snapshot or a compiler version. +# A snapshot resolver dictates the compiler version and the set of packages +# to be used for project dependencies. For example: +# +# resolver: lts-3.5 +# resolver: nightly-2015-09-21 +# resolver: ghc-7.10.2 +# +# The location of a snapshot can be provided as a file or url. Stack assumes +# a snapshot provided as a file might change, whereas a url resource does not. +# +# resolver: ./custom-snapshot.yaml +# resolver: https://example.com/snapshots/2018-01-01.yaml +resolver: + compiler: ghc-8.8.1 + +# User packages to be built. +# Various formats can be used as shown in the example below. +# +# packages: +# - some-directory +# - https://example.com/foo/bar/baz-0.0.2.tar.gz +# subdirs: +# - auto-update +# - wai +packages: +# The following packages have been ignored due to incompatibility with the +# resolver compiler, dependency conflicts with other packages +# or unsatisfied dependencies. +- . + +# Dependency packages to be pulled from upstream that are not in the resolver. +# These entries can reference officially published versions as well as +# forks / in-progress versions pinned to a git hash. For example: +# +# extra-deps: +# - acme-missiles-0.3 +# - git: https://github.com/commercialhaskell/stack.git +# commit: e7b331f14bcffb8367cd58fbfc8b40ec7642100a +# +extra-deps: +- bifunctors-5.5.5@sha256:e89def05aa5a9c729435592c11a35b54747558b1ec15c7283c7d61df03873ab6,3300 +- deque-0.4.2.3@sha256:7cc8ddfc77df351ff9c16e838ccdb4a89f055c80a3111e27eba8d90e8edde7d0,1853 +- extra-1.6.18@sha256:5f1fff126f0ae47b701fff5aa8462dc63cb44465d5a724b0afd20a3d731903af,2705 +- free-5.1.2@sha256:cd57d8cbaf8ef37620219095694b83e3b3baf3b06e1c59f422a4954d3a5f4c42,4116 +- microlens-0.4.11.2@sha256:765ec5cdd12a459e65161f0e3cdbce84652bf634d62af3911ba24e4bf8d4d944,4455 +- microlens-th-0.4.3.2@sha256:dd09aa02b7dc235a91b1e9ea6cd4be2f24c74ef067bc4e5fa2a5453c8b999d2c,2199 +- multistate-0.8.0.2@sha256:fbb0d8ade9ef73c8ed92488f5804d0ebe75d3a9c24bf53452bc3a4f32b34cb2e,3713 +- unsafe-0.0@sha256:93e58ac9aa1f4f9c50e12662a211f6c0b6f28b65c570ff17359851451c9bcb3a,1851 +- void-0.7.3@sha256:13d30f62fcdf065e595d679d4ac8b4b0c1bb1a1b73db7b5b5a8f857cb5c8a546,1857 +- base-orphans-0.8.1@sha256:defd0057b5db93257528d89b5b01a0fee9738e878c121c686948ac4aa5dded63,2927 +- clock-0.8@sha256:b4ae207e2d3761450060a0d0feb873269233898039c76fceef9cc1a544067767,4113 +- comonad-5.0.5@sha256:b33bc635615647916e374a27e96c3de4df390684001eab6291283471cd3a9b62,3345 +- distributive-0.6@sha256:26507cf231eb10db1eb54bc358477418ce87d5077ff76c66743925fb49494b54,3018 +- exceptions-0.10.3@sha256:6e8e66f3acf2ea59f9e100c55a885591c1981789ac2222022ff523c30990efb8,2251 +- monad-control-1.0.2.3@sha256:a3ae888d2fed2e2a0ca33ae11e2480219e07312bccf1a02ffe2ba2e3ec5913ee,2255 +- profunctors-5.4@sha256:545fdbc05131fa29e6612e915ec5d4dadfbcf3a6def86c8b95ca26593b21b259,2073 +- semigroupoids-5.3.3@sha256:260b62cb8539bb988e7f551f10a45ef1c81421c0d79010e9bde9321bad4982a7,7363 +- semigroups-0.19.1@sha256:ecae129621e0d2f77bef2f01e4458c2e0567ab6e1f39579c61d7cec8058ebb0e,6262 +- strict-list-0.1.4@sha256:0fa869e2c21b710b7133e8628169f120fe6299342628edd3d5087ded299bc941,1631 +- tagged-0.8.6@sha256:7093ee39c9779beeacffa4b0035a0e8a25da16afcd1c1a876930207fb8e31d1c,2606 +- th-abstraction-0.3.1.0@sha256:96042f6658f2dccfac03b33f0fd59f62b1f65b9b0a765d8a2ea6026f4081ee4a,1838 +- transformers-base-0.4.5.2@sha256:e4d8155470905ba2942033a1537fc4cf91927d1c9b34693fd57ddf3bc02334af,1550 +- cabal-doctest-1.0.7@sha256:2a9d524b9593fc5054c0bcfda9aeaffd4203f3663b77fab57db35ddd48ce6ad3,1573 +- contravariant-1.5.2@sha256:853259271870000c007a281f0bf0bf6e1aaa97c5fd5cd5734d7b0d79b9de2af5,2761 +- hashable-1.3.0.0@sha256:7ad8edaa681e81162ddddb4d703a9cffe6a0c9ddcfede31cf6569507ed3f1ddb,5179 +- transformers-compat-0.6.5@sha256:50b00c57bf3fc379ec2477bfc261a2aebc983084488478adb29854f193af4696,5490 +- unordered-containers-0.2.10.0@sha256:5e9b095a9283d9e2f064fec73a81a6b6ea0b7fda3f219a8175785d2d2a3de204,5199 +- StateVar-1.2@sha256:9ab3e4a0e252d28bc2f799c83e0725c3e23e8d3b722cff0fdb9822e64b6c16ac,1413 + +allow-newer: True +# Override default flag values for local packages and extra-deps +# flags: {} + +# Extra package databases containing global packages +# extra-package-dbs: [] + +# Control whether we use the GHC we find on the path +# system-ghc: true +# +# Require a specific version of stack, using version ranges +# require-stack-version: -any # Default +# require-stack-version: ">=2.1" +# +# Override the architecture used by stack, especially useful on Windows +# arch: i386 +# arch: x86_64 +# +# Extra directories used by stack for building +# extra-include-dirs: [/path/to/dir] +# extra-lib-dirs: [/path/to/dir] +# +# Allow a newer minor version of GHC than the snapshot specifies +# compiler-check: newer-minor