Compare commits

..

10 Commits

Author SHA1 Message Date
Lennart Spitzner 3109637cb7 Upgrade haskell.nix version 2020-10-06 10:56:55 +02:00
Lennart Spitzner fa44d8436f Make nix builds less verbose 2020-10-06 10:56:55 +02:00
Lennart Spitzner 7ffad18fd2 Update CI script to build examples too 2020-10-06 10:56:55 +02:00
Lennart Spitzner 9901a2240a Bump to 2.0.0.0, Append changelog, Update readme 2020-10-06 10:56:55 +02:00
Lennart Spitzner 0154eac030 Make examples non-buildable without new flag butcher-examples 2020-10-06 10:56:55 +02:00
Lennart Spitzner 5a573a3736 Add example for butcher+barbies usage 2020-10-06 10:56:55 +02:00
Lennart Spitzner 6f771e1c9f Clean up existing examples, Remove redundant function
mainFromCmdParserWithHelpDesc is no longer required, because
peekCmdDesc can be used at the top-level to access the full
CmdDesc value. The knot-tying implementation is no longer
required either.
2020-10-06 10:56:55 +02:00
Lennart Spitzner 7d151ac2fa Clean up haddocks 2020-10-06 10:56:55 +02:00
Lennart Spitzner 7f5470dfe0 Update examples / Put examples in components 2020-10-06 10:56:55 +02:00
Lennart Spitzner 6604a9746c Major changeset: Add applicative, Refactor monadic interface
- monadic interface now uses two-phase setup: First step is to create a
  full CommandDesc value, second is running the parser on input while the
  CommandDesc is chained along
- applicative interface has a somewhat nicer/cleaner implementation, is
  more secure by avoiding any demands on the API user that are not encoded
  in types, but is slightly less expressive and requires ApplicativeDo to
  get readable code.
- The applicative interface is *NOT* finished and the test-suite does not
  cover it.
- Add the `traverseBarbie` construct which introduces a dependency on
  the `barbies` library. This also effectively:
- Stop support for ghc < 8.4.
- Refactor the module structure a bit, and change the API of the central
  `runCmdParser` function. It now returns a `PartialParseInfo`. Essentially,
  `runCmdParser` is a combination of the previous `runCmdParser` and the
  previous `simpleCompletion`. This API design is a curious advantage to
  laziness: Returning a complex struct is harmless as fields that the user
  does not use won't be evaluated. The downside is that the core function now
  looks like a complex beast, but the upside is that there is no need to
  expose multiple functions that are supposed to be chained in a certain way
  to get all functionality (if desired), and we still _can_ provide simpler
  versions that are just projections on the `PartialParseInfo`.
- Stop support for an anti-feature: The implicit merging of multiple
  sub-commands definitions with the same name.
2020-10-06 10:56:55 +02:00
20 changed files with 391 additions and 282 deletions

4
.gitignore vendored
View File

@ -15,7 +15,3 @@ cabal.sandbox.config
\#*.gui\#
cabal.project.local
.ghc.environment.*
/result*
/nix/seaaye-cache
/nix/gcroots
/nix/ci-out

View File

@ -1,10 +1,9 @@
# Revision history for butcher
## 2.0.0.0 -- May 2023
## 2.0.0.0 -- Sept 2020
Large internal refactor including some breaking API changes.
- Support ghc-9.0 and ghc-9.2
- Add the "Applicative" interface in addition to the existing "Monadic" one.
This is slightly less expressive but conceptually cleaner/safer (and its
implementation is nicer). For best readability you may need `ApplicativeDo`.

View File

@ -53,7 +53,7 @@ library
UI.Butcher.Internal.Pretty
UI.Butcher.Internal.Interactive
build-depends:
{ base >=4.11 && <4.17
{ base >=4.11 && <4.15
, free < 5.2
, unsafe < 0.1
, microlens <0.5

3
nix/.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
nixpkgs.nix
local-extra-deps.nix
gcroots

32
nix/README.md Normal file
View File

@ -0,0 +1,32 @@
This nix setup expects the iohk haskell-nix overlay to be available/included
when importing `<nixpkgs>`. 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)

103
nix/all.nix Normal file
View File

@ -0,0 +1,103 @@
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/efbc254a495e65f8d264b3232ddfdf5b8ddc52de.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-08-10T00: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-08-10T00: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-08-10T00: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-08-10T00: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"; }
];
}

53
nix/ci.sh Executable file
View File

@ -0,0 +1,53 @@
#!/bin/bash
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; }
nix-build -o "$OUTDIR/$ATTRPATH-build" nix/all.nix -Q -A "\"$ATTRPATH\".allComponents"\
2> >(tee "$OUTDIR/$ATTRPATH-build.txt" >&2)
(($? == 0)) || { echo "$ATTRPATH: all-component build failed" >> "$SUMMARY"; return 1; }
nix-build -o "$OUTDIR/$ATTRPATH-test-result.txt" -Q nix/all.nix -A "\"$ATTRPATH\".butcher.checks.tests"
(($? == 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"

25
nix/create-roots.sh Executable file
View File

@ -0,0 +1,25 @@
set -ex
ROOTSDIR="nix/gcroots"
function create-root {
local ATTRPATH=$1
nix-build -Q -o "${ROOTSDIR}/${ATTRPATH}-shell" nix/all.nix -A "\"$ATTRPATH\".shell"
nix-build -Q -o "${ROOTSDIR}/${ATTRPATH}-test" nix/all.nix -A "\"$ATTRPATH\".butcher.components.tests.tests"
nix-build -Q -o "${ROOTSDIR}/${ATTRPATH}-plan" nix/all.nix -A "\"$ATTRPATH\".butcher-plan"
nix-build -Q -o "${ROOTSDIR}/${ATTRPATH}-nix" nix/all.nix -A "\"$ATTRPATH\".butcher-nix" || true
}
mkdir -p "$ROOTSDIR"
nix-build -Q -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"

70
nix/via-hackage.nix Normal file
View File

@ -0,0 +1,70 @@
{ 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 = configureArgs + " -fbutcher-examples";
# 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}; }
# (pkgs.haskell-nix.mkCacheModule generatedCache)
{ packages.butcher.flags.butcher-examples = true; }
];
};
in pkg-set.config.hsPkgs;
inherit (hsPkgs) butcher;
inherit (hsPkgs.butcher) checks;
allComponents = pkgs.linkFarm
"allComponents"
(builtins.map
(x: { name = x.name; path = x; })
(pkgs.haskell-nix.haskellLib.getAllComponents butcher));
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;
};
}

100
nix/via-stackage.nix Normal file
View File

@ -0,0 +1,100 @@
{ 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.haskell-nix.mkCacheModule generatedCache)
{ packages.butcher.flags.butcher-examples = true; }
];
}).config.hsPkgs;
in rec {
inherit butcher-nix butcher-plan hsPkgs pkgs;
inherit (hsPkgs) butcher;
inherit (hsPkgs.butcher) checks;
allComponents = pkgs.linkFarm
"allComponents"
(builtins.map
(x: { name = x.name; path = x; })
(pkgs.haskell-nix.haskellLib.getAllComponents butcher));
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; }
# ];
# }

View File

@ -1,74 +0,0 @@
{ 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";
};
hackage-9-00 = {
resolver = "hackage";
index-state = "2022-07-01T00:00:00Z";
ghc-ver = "ghc902";
};
hackage-9-02 = {
resolver = "hackage";
index-state = "2022-07-01T00:00:00Z";
ghc-ver = "ghc925";
};
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";
};
stackage-9-00 = {
resolver = "stackage";
stackFile = "stack-9-0.yaml";
ghc-ver = "ghc902";
};
stackage-9-02 = {
resolver = "stackage";
stackFile = "stack-9-2.yaml";
ghc-ver = "ghc925";
};
};
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;
}

View File

@ -157,7 +157,7 @@ data MyFlagStruct (c :: Type) (f :: Type -> Type) = MyFlagStruct
instance Barbies.FunctorB (MyFlagStruct Barbies.Covered)
instance Barbies.BareB MyFlagStruct
instance Barbies.TraversableB (MyFlagStruct Barbies.Covered)
instance Semigroup (MyFlagStruct Barbies.Covered Maybe) where
instance Semigroup (MyFlagStruct Barbies.Covered Option) where
(<>) = gmappend
_test :: IO ()

View File

@ -77,8 +77,6 @@ module UI.Butcher.Monadic.Command
, addAlternatives
, ManyUpperBound (..)
, varPartDesc
, PartParser
, PartParseResult(..)
)
where

View File

@ -116,7 +116,7 @@ import Data.Monoid ( Endo(..), All(..), Any(..), Sum(..), Product(..), Alt(..),
import Data.Void ( Void )
-- import Data.Proxy ( Proxy(..) )
import Data.Sequence ( Seq )
import Data.Semigroup ( Semigroup(..) )
import Data.Semigroup ( Semigroup(..), Option )
import Data.Map ( Map )
import Data.Set ( Set )

View File

@ -1,66 +0,0 @@
# 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-18.13
# 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

View File

@ -1,100 +0,0 @@
# 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

View File

@ -11,7 +11,7 @@
#
# resolver: ./custom-snapshot.yaml
# resolver: https://example.com/snapshots/2018-01-01.yaml
resolver: lts-16.31
resolver: lts-15.12
# User packages to be built.
# Various formats can be used as shown in the example below.

View File

@ -1,30 +0,0 @@
resolver: lts-19.33
packages:
- .
extra-deps: []
# 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