Skip to content

Commit

Permalink
Make compatible with GHC >= 8.0.2 (#15)
Browse files Browse the repository at this point in the history
DerivingVia is great, but depending on it makes this library work only with a relatively recent GHC. With a heavy heart I remove the dependency on DerivingVia, making the library compatible with GHC >= 8.0.2.

See also #14.
  • Loading branch information
snowleopard authored May 12, 2019
1 parent 4a5a24e commit bdc4c60
Show file tree
Hide file tree
Showing 8 changed files with 231 additions and 118 deletions.
152 changes: 120 additions & 32 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,32 +1,120 @@
sudo: false

cache:
directories:
- $HOME/.ghc
- $HOME/.cabal
- $HOME/.stack

matrix:
include:
- os: osx
before_install:
- brew update
- brew install haskell-stack

- os: linux
addons:
apt:
packages:
- libgmp-dev
before_install:
- mkdir -p ~/.local/bin
- export PATH=$HOME/.local/bin:$PATH
- travis_retry curl -L https://www.stackage.org/stack/linux-x86_64 | tar xz --wildcards --strip-components=1 -C ~/.local/bin '*/stack'

before_script:
- stack setup
- stack exec -- ghc --version
- stack build

script:
- stack test
# This Travis job script has been generated by a script via
#
# haskell-ci 'selective.cabal' '--osx=8.6.4' '-o' '.travis.yml'
#
# For more information, see https://github.com/haskell-CI/haskell-ci
#
# version: 0.2.1
#
language: c
dist: xenial

git:
submodules: false # whether to recursively clone submodules

cache:
directories:
- $HOME/.cabal/packages
- $HOME/.cabal/store
- $HOME/.ghc-install

before_cache:
- rm -fv $CABALHOME/packages/hackage.haskell.org/build-reports.log
# remove files that are regenerated by 'cabal update'
- rm -fv $CABALHOME/packages/hackage.haskell.org/00-index.*
- rm -fv $CABALHOME/packages/hackage.haskell.org/*.json
- rm -fv $CABALHOME/packages/hackage.haskell.org/01-index.cache
- rm -fv $CABALHOME/packages/hackage.haskell.org/01-index.tar
- rm -fv $CABALHOME/packages/hackage.haskell.org/01-index.tar.idx

- rm -rfv $CABALHOME/packages/head.hackage

matrix:
include:
- compiler: "ghc-8.6.4"
addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-8.6.4], sources: [hvr-ghc]}}
- compiler: "ghc-8.4.3"
addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-8.4.3], sources: [hvr-ghc]}}
- compiler: "ghc-8.2.2"
addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-8.2.2], sources: [hvr-ghc]}}
- compiler: "ghc-8.0.2"
addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-8.0.2], sources: [hvr-ghc]}}
- compiler: "ghc-8.6.4"
addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-8.6.4], sources: [hvr-ghc]}}
os: osx

before_install:
- HC=/opt/ghc/bin/${CC}
- HCPKG=${HC/ghc/ghc-pkg}
- unset CC
- CABAL=/opt/ghc/bin/cabal
- CABALHOME=$HOME/.cabal
- export PATH="$CABALHOME/bin:$PATH"
- ROOTDIR=$(pwd)
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew update; brew upgrade python@3; curl https://haskell.futurice.com/haskell-on-macos.py | python3 - --make-dirs --install-dir=$HOME/.ghc-install --cabal-alias=head install cabal-install-head ${TRAVIS_COMPILER}; fi
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then HC=$HOME/.ghc-install/ghc/bin/$TRAVIS_COMPILER; HCPKG=${HC/ghc/ghc-pkg}; CABAL=$HOME/.ghc-install/ghc/bin/cabal; fi
- HCNUMVER=$(( $(${HC} --numeric-version|sed -E 's/([0-9]+)\.([0-9]+)\.([0-9]+).*/\1 * 10000 + \2 * 100 + \3/') ))
- echo $HCNUMVER

install:
- ${CABAL} --version
- echo "$(${HC} --version) [$(${HC} --print-project-git-commit-id 2> /dev/null || echo '?')]"
- TEST=--enable-tests
- BENCH=--enable-benchmarks
- GHCHEAD=${GHCHEAD-false}
- travis_retry ${CABAL} update -v
- sed -i.bak 's/^jobs:/-- jobs:/' $CABALHOME/config
- rm -fv cabal.project cabal.project.local
- grep -Ev -- '^\s*--' $CABALHOME/config | grep -Ev '^\s*$'
- rm -f cabal.project
- touch cabal.project
- "printf 'packages: \".\"\\n' >> cabal.project"
- "printf 'write-ghc-environment-files: always\\n' >> cabal.project"
- touch cabal.project.local
- "for pkg in $($HCPKG list --simple-output); do echo $pkg | sed 's/-[^-]*$//' | grep -vE -- '^(selective)$' | sed 's/^/constraints: /' | sed 's/$/ installed/' >> cabal.project.local; done"
- cat cabal.project || true
- cat cabal.project.local || true
- if [ -f "./configure.ac" ]; then (cd "." && autoreconf -i); fi
- rm -f cabal.project.freeze
- ${CABAL} new-freeze -w ${HC} ${TEST} ${BENCH} --project-file="cabal.project" --dry
- "cat \"cabal.project.freeze\" | sed -E 's/^(constraints: *| *)//' | sed 's/any.//'"
- rm "cabal.project.freeze"
- ${CABAL} new-build -w ${HC} ${TEST} ${BENCH} --project-file="cabal.project" --dep -j2 all
- ${CABAL} new-build -w ${HC} --disable-tests --disable-benchmarks --project-file="cabal.project" --dep -j2 all
- rm -rf .ghc.environment.* "."/dist
- DISTDIR=$(mktemp -d /tmp/dist-test.XXXX)

# Here starts the actual work to be performed for the package under test;
# any command which exits with a non-zero exit code causes the build to fail.
script:
# test that source-distributions can be generated
- ${CABAL} new-sdist all
- mv dist-newstyle/sdist/*.tar.gz ${DISTDIR}/
- cd ${DISTDIR} || false
- find . -maxdepth 1 -name '*.tar.gz' -exec tar -xvf '{}' \;
- rm -f cabal.project
- touch cabal.project
- "printf 'packages: \"selective-*/*.cabal\"\\n' >> cabal.project"
- "printf 'write-ghc-environment-files: always\\n' >> cabal.project"
- touch cabal.project.local
- "for pkg in $($HCPKG list --simple-output); do echo $pkg | sed 's/-[^-]*$//' | grep -vE -- '^(selective)$' | sed 's/^/constraints: /' | sed 's/$/ installed/' >> cabal.project.local; done"
- cat cabal.project || true
- cat cabal.project.local || true
# this builds all libraries and executables (without tests/benchmarks)
- ${CABAL} new-build -w ${HC} --disable-tests --disable-benchmarks all

# build & run tests, build benchmarks
- ${CABAL} new-build -w ${HC} ${TEST} ${BENCH} all
- if [ "x$TEST" = "x--enable-tests" ]; then ${CABAL} new-test -w ${HC} ${TEST} ${BENCH} all; fi

# cabal check
- (cd selective-* && ${CABAL} check)

# haddock
- ${CABAL} new-haddock -w ${HC} ${TEST} ${BENCH} all

# Build without installed constraints for packages in global-db
- rm -f cabal.project.local; ${CABAL} new-build -w ${HC} --disable-tests --disable-benchmarks all;

# REGENDATA ["selective.cabal","--osx=8.6.4","-o",".travis.yml"]
# EOF
7 changes: 7 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Change log

## 0.2

* Make compatible with GHC >= 8.0.2.
* Add another free construction `Control.Selective.Free`.
* Add several new `Selective` instances.
6 changes: 3 additions & 3 deletions examples/Processor.hs
Original file line number Diff line number Diff line change
Expand Up @@ -271,9 +271,9 @@ willOverflow arg1 arg2 =

renderState :: State -> String
renderState state =
"Registers: " <> show (registers state) <> "\n" <>
"Flags: " <> show (Map.toList $ flags state) <> "\n" <>
"Log: " <> show (log state)
"Registers: " ++ show (registers state) ++ "\n" ++
"Flags: " ++ show (Map.toList $ flags state) ++ "\n" ++
"Log: " ++ show (log state)

instance Show State where
show = renderState
Expand Down
27 changes: 14 additions & 13 deletions selective.cabal
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: selective
version: 0.1.0
version: 0.2
synopsis: Selective applicative functors
license: MIT
license-file: LICENSE
Expand All @@ -10,7 +10,10 @@ homepage: https://github.com/snowleopard/selective
category: Control
build-type: Simple
cabal-version: 1.18
tested-with: GHC==8.6.4
tested-with: GHC==8.0.2,
GHC==8.2.2,
GHC==8.4.3,
GHC==8.6.4
stability: experimental
description: Selective applicative functors: declare your effects statically,
select which to execute dynamically.
Expand All @@ -33,17 +36,17 @@ library
Control.Selective.Free,
Control.Selective.Free.Rigid
build-depends: base >= 4.7 && < 5,
containers >= 0.5.7.1 && < 7,
transformers >= 0.5.2.0 && < 0.6
containers >= 0.5.5.1 && < 0.7,
transformers >= 0.4.2.0 && < 0.6
default-language: Haskell2010
other-extensions: DeriveFunctor,
DerivingVia,
FlexibleInstances,
GADTs,
GeneralizedNewtypeDeriving,
RankNTypes,
StandaloneDeriving,
TupleSections
TupleSections,
TypeApplications
GHC-options: -Wall
-fno-warn-name-shadowing
-Wcompat
Expand All @@ -63,19 +66,17 @@ test-suite test
type: exitcode-stdio-1.0
main-is: Main.hs
build-depends: base >= 4.7 && < 5,
containers >= 0.5.7.1 && < 7,
containers >= 0.5.5.1 && < 0.7,
mtl >= 2.2.1 && < 2.3,
QuickCheck >= 2.9 && < 2.13,
QuickCheck >= 2.8 && < 2.14,
selective,
tasty >= 1.2,
tasty-expected-failure >= 0.11.1.1,
tasty-quickcheck >= 0.10
tasty >= 0.11,
tasty-expected-failure >= 0.11,
tasty-quickcheck >= 0.8.4
default-language: Haskell2010
GHC-options: -Wall
-fno-warn-name-shadowing
-Wcompat
-Wincomplete-record-updates
-Wincomplete-uni-patterns
-Wredundant-constraints
-fno-warn-orphans
-fno-warn-missing-signatures
Loading

0 comments on commit bdc4c60

Please sign in to comment.