pointed 5 → 5.0.1
raw patch · 5 files changed
+216/−15 lines, 5 filesdep +generic-derivingdep +ghc-primdep ~basedep ~containersdep ~hashablenew-uploader
Dependencies added: generic-deriving, ghc-prim
Dependency ranges changed: base, containers, hashable, semigroupoids, stm
Files
- .travis.yml +131/−1
- CHANGELOG.markdown +9/−0
- pointed.cabal +17/−4
- src/Data/Copointed.hs +35/−10
- src/Data/Pointed.hs +24/−0
.travis.yml view
@@ -1,4 +1,15 @@-language: haskell+# This Travis job script has been generated by a script via+#+# runghc make_travis_yml_2.hs '-o' '.travis.yml' '--irc-channel=irc.freenode.org#haskell-lens' '--no-no-tests-no-bench' '--no-installed' 'cabal.project'+#+# For more information, see https://github.com/hvr/multi-ghc-travis+#+language: c+sudo: false++git:+ submodules: false # whether to recursively clone submodules+ notifications: irc: channels:@@ -6,3 +17,122 @@ skip_join: true template: - "\x0313pointed\x03/\x0306%{branch}\x03 \x0314%{commit}\x03 %{build_url} %{message}"++cache:+ directories:+ - $HOME/.cabal/packages+ - $HOME/.cabal/store++before_cache:+ - rm -fv $HOME/.cabal/packages/hackage.haskell.org/build-reports.log+ # remove files that are regenerated by 'cabal update'+ - rm -fv $HOME/.cabal/packages/hackage.haskell.org/00-index.*+ - rm -fv $HOME/.cabal/packages/hackage.haskell.org/*.json+ - rm -fv $HOME/.cabal/packages/hackage.haskell.org/01-index.cache+ - rm -fv $HOME/.cabal/packages/hackage.haskell.org/01-index.tar+ - rm -fv $HOME/.cabal/packages/hackage.haskell.org/01-index.tar.idx++ - rm -rfv $HOME/.cabal/packages/head.hackage++matrix:+ include:+ - compiler: "ghc-7.4.2"+ # env: TEST=--disable-tests BENCH=--disable-benchmarks+ addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.0,ghc-7.4.2], sources: [hvr-ghc]}}+ - compiler: "ghc-7.6.3"+ # env: TEST=--disable-tests BENCH=--disable-benchmarks+ addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.0,ghc-7.6.3], sources: [hvr-ghc]}}+ - compiler: "ghc-7.8.4"+ # env: TEST=--disable-tests BENCH=--disable-benchmarks+ addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.0,ghc-7.8.4], sources: [hvr-ghc]}}+ - compiler: "ghc-7.10.3"+ # env: TEST=--disable-tests BENCH=--disable-benchmarks+ addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.0,ghc-7.10.3], sources: [hvr-ghc]}}+ - compiler: "ghc-8.0.2"+ # env: TEST=--disable-tests BENCH=--disable-benchmarks+ addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.0,ghc-8.0.2], sources: [hvr-ghc]}}+ - compiler: "ghc-8.2.2"+ # env: TEST=--disable-tests BENCH=--disable-benchmarks+ addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.0,ghc-8.2.2], sources: [hvr-ghc]}}+ - compiler: "ghc-8.4.1"+ env: GHCHEAD=true+ addons: {apt: {packages: [ghc-ppa-tools,cabal-install-head,ghc-8.4.1], sources: [hvr-ghc]}}+ - compiler: "ghc-head"+ env: GHCHEAD=true+ addons: {apt: {packages: [ghc-ppa-tools,cabal-install-head,ghc-head], sources: [hvr-ghc]}}++ allow_failures:+ - compiler: "ghc-8.4.1"+ - compiler: "ghc-head"++before_install:+ - HC=${CC}+ - HCPKG=${HC/ghc/ghc-pkg}+ - unset CC+ - ROOTDIR=$(pwd)+ - mkdir -p $HOME/.local/bin+ - "PATH=/opt/ghc/bin:/opt/ghc-ppa-tools/bin:$HOME/local/bin:$PATH"+ - 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 '?')]"+ - BENCH=${BENCH---enable-benchmarks}+ - TEST=${TEST---enable-tests}+ - HADDOCK=${HADDOCK-true}+ - INSTALLED=${INSTALLED-true}+ - GHCHEAD=${GHCHEAD-false}+ - travis_retry cabal update -v+ - "sed -i.bak 's/^jobs:/-- jobs:/' ${HOME}/.cabal/config"+ - rm -fv cabal.project cabal.project.local+ # Overlay Hackage Package Index for GHC HEAD: https://github.com/hvr/head.hackage+ - |+ if $GHCHEAD; then+ sed -i.bak 's/-- allow-newer:.*/allow-newer: *:base, *:template-haskell, *:ghc, *:Cabal/' ${HOME}/.cabal/config++ echo 'repository head.hackage' >> ${HOME}/.cabal/config+ echo ' url: http://head.hackage.haskell.org/' >> ${HOME}/.cabal/config+ echo ' secure: True' >> ${HOME}/.cabal/config+ echo ' root-keys: 07c59cb65787dedfaef5bd5f987ceb5f7e5ebf88b904bbd4c5cbdeb2ff71b740' >> ${HOME}/.cabal/config+ echo ' 2e8555dde16ebd8df076f1a8ef13b8f14c66bad8eafefd7d9e37d0ed711821fb' >> ${HOME}/.cabal/config+ echo ' 8f79fd2389ab2967354407ec852cbe73f2e8635793ac446d09461ffb99527f6e' >> ${HOME}/.cabal/config+ echo ' key-threshold: 3' >> ${HOME}/.cabal.config++ cabal new-update head.hackage -v+ fi+ - grep -Ev -- '^\s*--' ${HOME}/.cabal/config | grep -Ev '^\s*$'+ - "printf 'packages: \".\"\\n' > cabal.project"+ - cat cabal.project+ - if [ -f "./configure.ac" ]; then+ (cd "." && autoreconf -i);+ fi+ - rm -f cabal.project.freeze+ - cabal new-build -w ${HC} ${TEST} ${BENCH} --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+ - (cd "." && cabal sdist)+ - mv "."/dist/pointed-*.tar.gz ${DISTDIR}/+ - cd ${DISTDIR} || false+ - find . -maxdepth 1 -name '*.tar.gz' -exec tar -xvf '{}' \;+ - "printf 'packages: pointed-*/*.cabal\\n' > cabal.project"+ - cat cabal.project+++ # build & run tests, build benchmarks+ - cabal new-build -w ${HC} ${TEST} ${BENCH} all++ # cabal check+ - (cd pointed-* && cabal check)++ # haddock+ - rm -rf ./dist-newstyle+ - if $HADDOCK; then cabal new-haddock -w ${HC} ${TEST} ${BENCH} all; else echo "Skipping haddock generation";fi++# REGENDATA ["-o",".travis.yml","--irc-channel=irc.freenode.org#haskell-lens","--no-no-tests-no-bench","--no-installed","cabal.project"]+# EOF
CHANGELOG.markdown view
@@ -1,3 +1,12 @@+5.0.1+-----+* Add `Pointed` and `Copointed` instances for various types from `GHC.Generics`.+* Do not attempt to support Safe Haskell anymore.++5+-+* Require `kan-extensions-5`.+ 4.2.1 ----- * Added (largely unsupported) options to build without almost all of the dependencies for advanced users
pointed.cabal view
@@ -1,6 +1,6 @@ name: pointed category: Data-version: 5+version: 5.0.1 license: BSD3 cabal-version: >= 1.6 license-file: LICENSE@@ -11,8 +11,15 @@ bug-reports: http://github.com/ekmett/pointed/issues copyright: Copyright (C) 2008-2016 Edward A. Kmett synopsis: Pointed and copointed data-description: Pointed and copointed data+description: Pointed and copointed data. build-type: Simple+tested-with: GHC == 7.4.2+ , GHC == 7.6.3+ , GHC == 7.8.4+ , GHC == 7.10.3+ , GHC == 8.0.2+ , GHC == 8.2.2+ , GHC == 8.4.1 extra-source-files: .travis.yml README.markdown@@ -60,8 +67,14 @@ manual: True library- build-depends: base >= 4 && < 5,- data-default-class >= 0.0.1 && < 0.1+ build-depends: base >= 4.5 && < 5,+ data-default-class >= 0.0.1 && < 0.2++ if impl(ghc >= 7.0 && < 7.2)+ build-depends: generic-deriving >= 1.11 && < 1.13++ if impl(ghc >= 7.2 && < 7.6)+ build-depends: ghc-prim if flag(comonad) build-depends: comonad >= 5 && < 6
src/Data/Copointed.hs view
@@ -1,8 +1,6 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE TypeFamilies #-}-#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702-{-# LANGUAGE Safe #-}-#endif+{-# LANGUAGE TypeOperators #-} #ifndef MIN_VERSION_base #define MIN_VERSION_base(x,y,z) 0@@ -31,13 +29,14 @@ import Data.Functor.Bind #endif + #if defined(MIN_VERSION_semigroups) || (MIN_VERSION_base(4,9,0)) import Data.Semigroup as Semigroup import Data.List.NonEmpty (NonEmpty(..))-#else-import Data.Monoid #endif +import qualified Data.Monoid as Monoid+ #ifdef MIN_VERSION_tagged import Data.Tagged #endif@@ -60,6 +59,12 @@ import qualified Control.Monad.Trans.Writer.Strict as Strict #endif +#if defined(MIN_VERSION_generic_deriving)+import Generics.Deriving+#else+import GHC.Generics+#endif+ -- | 'Copointed' does not require a 'Functor', as the only relationship -- between 'copoint' and 'fmap' is given by a free theorem. @@ -92,10 +97,12 @@ copoint (StoreT wf s) = copoint wf s #endif -#if defined(MIN_VERSION_comonad) && !(MIN_VERSION_comonad(4,3,0))+#ifdef MIN_VERSION_comonad+#if !(MIN_VERSION_comonad(4,3,0)) instance (Copointed p, Copointed q) => Copointed (Coproduct p q) where copoint = coproduct copoint copoint #endif+#endif #ifdef MIN_VERSION_containers instance Copointed Tree where@@ -142,12 +149,15 @@ copoint = fst . copoint . Strict.runWriterT #endif -instance Copointed Semigroup.Dual where- copoint = Semigroup.getDual+instance Copointed Monoid.Dual where+ copoint = Monoid.getDual -instance Copointed Semigroup.Sum where- copoint = Semigroup.getSum+instance Copointed Monoid.Sum where+ copoint = Monoid.getSum +instance Copointed Monoid.Product where+ copoint = Monoid.getProduct+ #if defined(MIN_VERSION_semigroups) || (MIN_VERSION_base(4,9,0)) instance Copointed NonEmpty where copoint ~(a :| _) = a@@ -190,3 +200,18 @@ copoint (MaybeApply (Right a)) = a #endif +instance Copointed Par1 where+ copoint = unPar1++instance Copointed f => Copointed (M1 i c f) where+ copoint = copoint . unM1++instance Copointed f => Copointed (Rec1 f) where+ copoint = copoint . unRec1++instance (Copointed f, Copointed g) => Copointed (f :+: g) where+ copoint (L1 a) = copoint a+ copoint (R1 a) = copoint a++instance (Copointed f, Copointed g) => Copointed (f :.: g) where+ copoint = copoint . copoint . unComp1
src/Data/Pointed.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeOperators #-} {-# OPTIONS_GHC -fno-warn-deprecations #-} #ifndef MIN_VERSION_base@@ -88,6 +89,12 @@ import qualified Data.HashMap.Lazy as HashMap #endif +#if defined(MIN_VERSION_generic_deriving)+import Generics.Deriving+#else+import GHC.Generics+#endif+ class Pointed p where point :: a -> p a @@ -305,3 +312,20 @@ point = HashMap.singleton def #endif +instance Pointed U1 where+ point _ = U1++instance Pointed Par1 where+ point = Par1++instance Pointed f => Pointed (Rec1 f) where+ point = Rec1 . point++instance Pointed f => Pointed (M1 i c f) where+ point = M1 . point++instance (Pointed f, Pointed g) => Pointed (f :*: g) where+ point a = point a :*: point a++instance (Pointed f, Pointed g) => Pointed (f :.: g) where+ point = Comp1 . point . point