Hello community,

here is the log from the commit of package ghc-lens for openSUSE:Factory 
checked in at 2019-05-09 10:10:08
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-lens (Old)
 and      /work/SRC/openSUSE:Factory/.ghc-lens.new.5148 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ghc-lens"

Thu May  9 10:10:08 2019 rev:3 rq:700201 version:4.17.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-lens/ghc-lens.changes        2018-10-25 
08:17:38.816036505 +0200
+++ /work/SRC/openSUSE:Factory/.ghc-lens.new.5148/ghc-lens.changes      
2019-05-09 10:10:10.185158553 +0200
@@ -1,0 +2,15 @@
+Tue Apr 30 09:23:06 UTC 2019 - [email protected]
+
+- Update lens to version 4.17.1.
+  4.17.1 [2019.04.26]
+  -------------------
+  * Support `th-abstraction-0.3.0.0` or later.
+  * Only incur `semigroups` and `void` dependencies on old GHCs.
+  * Add `holes1Of`.
+  * Add `locally` (https://github.com/ekmett/lens/pull/829).
+  * Add `ilocally` (https://github.com/ekmett/lens/pull/836).
+  * Add a third `Prism` law.
+  * Add `gplate1`.
+  * Add `Wrapped`/`Rewrapped` instances for `Data.Monoid.Ap`.
+
+-------------------------------------------------------------------

Old:
----
  lens-4.17.tar.gz

New:
----
  lens-4.17.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ ghc-lens.spec ++++++
--- /var/tmp/diff_new_pack.3yf5vX/_old  2019-05-09 10:10:12.333164703 +0200
+++ /var/tmp/diff_new_pack.3yf5vX/_new  2019-05-09 10:10:12.337164714 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package ghc-lens
 #
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -19,7 +19,7 @@
 %global pkg_name lens
 %bcond_with tests
 Name:           ghc-%{pkg_name}
-Version:        4.17
+Version:        4.17.1
 Release:        0
 Summary:        Lenses, Folds and Traversals
 License:        BSD-2-Clause
@@ -48,7 +48,6 @@
 BuildRequires:  ghc-reflection-devel
 BuildRequires:  ghc-rpm-macros
 BuildRequires:  ghc-semigroupoids-devel
-BuildRequires:  ghc-semigroups-devel
 BuildRequires:  ghc-tagged-devel
 BuildRequires:  ghc-template-haskell-devel
 BuildRequires:  ghc-text-devel
@@ -57,7 +56,6 @@
 BuildRequires:  ghc-transformers-devel
 BuildRequires:  ghc-unordered-containers-devel
 BuildRequires:  ghc-vector-devel
-BuildRequires:  ghc-void-devel
 %if %{with tests}
 BuildRequires:  ghc-HUnit-devel
 BuildRequires:  ghc-QuickCheck-devel
@@ -66,6 +64,7 @@
 BuildRequires:  ghc-doctest-devel
 BuildRequires:  ghc-generic-deriving-devel
 BuildRequires:  ghc-nats-devel
+BuildRequires:  ghc-semigroups-devel
 BuildRequires:  ghc-simple-reflect-devel
 BuildRequires:  ghc-test-framework-devel
 BuildRequires:  ghc-test-framework-hunit-devel

++++++ lens-4.17.tar.gz -> lens-4.17.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/.travis.yml new/lens-4.17.1/.travis.yml
--- old/lens-4.17/.travis.yml   2018-07-03 19:04:18.000000000 +0200
+++ new/lens-4.17.1/.travis.yml 2001-09-09 03:46:40.000000000 +0200
@@ -1,11 +1,13 @@
 # This Travis job script has been generated by a script via
 #
-#   runghc make_travis_yml_2.hs '-o' '.travis.yml' '--ghc-head' 
'--irc-channel=irc.freenode.org#haskell-lens' '--no-no-tests-no-bench' 
'--no-unconstrained' 'cabal.project'
+#   haskell-ci '--output=.travis.yml' '--config=cabal.haskell-ci' 
'cabal.project'
 #
-# For more information, see https://github.com/hvr/multi-ghc-travis
+# For more information, see https://github.com/haskell-CI/haskell-ci
+#
+# version: 0.2.1
 #
 language: c
-sudo: false
+dist: xenial
 
 git:
   submodules: false  # whether to recursively clone submodules
@@ -24,120 +26,99 @@
     - $HOME/.cabal/store
 
 before_cache:
-  - rm -fv $HOME/.cabal/packages/hackage.haskell.org/build-reports.log
+  - rm -fv $CABALHOME/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
-
-addons:
-  apt:
-    packages: &apt_packages
-      - ghc-ppa-tools
-      - freeglut3-dev
-      - alex-3.1.7
-      - happy-1.19.5
+  - 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.1"
-      env: GHCHEAD=true
-      addons: {apt: {packages: [*apt_packages,cabal-install-head,ghc-8.6.1], 
sources: [hvr-ghc]}}
-    - compiler: "ghc-8.4.3"
-    # env: TEST=--disable-tests BENCH=--disable-benchmarks
-      addons: {apt: {packages: [*apt_packages,cabal-install-2.2,ghc-8.4.3], 
sources: [hvr-ghc]}}
+    - compiler: "ghc-8.6.4"
+      addons: {apt: {packages: 
[ghc-ppa-tools,cabal-install-2.4,ghc-8.6.4,freeglut3-dev], sources: [hvr-ghc]}}
+    - compiler: "ghc-8.4.4"
+      addons: {apt: {packages: 
[ghc-ppa-tools,cabal-install-2.4,ghc-8.4.4,freeglut3-dev], sources: [hvr-ghc]}}
     - compiler: "ghc-8.2.2"
-    # env: TEST=--disable-tests BENCH=--disable-benchmarks
-      addons: {apt: {packages: [*apt_packages,cabal-install-2.2,ghc-8.2.2], 
sources: [hvr-ghc]}}
+      addons: {apt: {packages: 
[ghc-ppa-tools,cabal-install-2.4,ghc-8.2.2,freeglut3-dev], sources: [hvr-ghc]}}
     - compiler: "ghc-8.0.2"
-    # env: TEST=--disable-tests BENCH=--disable-benchmarks
-      addons: {apt: {packages: [*apt_packages,cabal-install-2.2,ghc-8.0.2], 
sources: [hvr-ghc]}}
+      addons: {apt: {packages: 
[ghc-ppa-tools,cabal-install-2.4,ghc-8.0.2,freeglut3-dev], sources: [hvr-ghc]}}
     - compiler: "ghc-7.10.3"
-    # env: TEST=--disable-tests BENCH=--disable-benchmarks
-      addons: {apt: {packages: [*apt_packages,cabal-install-2.2,ghc-7.10.3], 
sources: [hvr-ghc]}}
+      addons: {apt: {packages: 
[ghc-ppa-tools,cabal-install-2.4,ghc-7.10.3,freeglut3-dev], sources: [hvr-ghc]}}
     - compiler: "ghc-7.8.4"
-    # env: TEST=--disable-tests BENCH=--disable-benchmarks
-      addons: {apt: {packages: [*apt_packages,cabal-install-2.2,ghc-7.8.4], 
sources: [hvr-ghc]}}
+      addons: {apt: {packages: 
[ghc-ppa-tools,cabal-install-2.4,ghc-7.8.4,freeglut3-dev], sources: [hvr-ghc]}}
     - compiler: "ghc-7.6.3"
-    # env: TEST=--disable-tests BENCH=--disable-benchmarks
-      addons: {apt: {packages: [*apt_packages,cabal-install-2.2,ghc-7.6.3], 
sources: [hvr-ghc]}}
+      addons: {apt: {packages: 
[ghc-ppa-tools,cabal-install-2.4,ghc-7.6.3,freeglut3-dev], sources: [hvr-ghc]}}
     - compiler: "ghc-7.4.2"
-    # env: TEST=--disable-tests BENCH=--disable-benchmarks
-      addons: {apt: {packages: [*apt_packages,cabal-install-2.2,ghc-7.4.2], 
sources: [hvr-ghc]}}
+      addons: {apt: {packages: 
[ghc-ppa-tools,cabal-install-2.4,ghc-7.4.2,freeglut3-dev], sources: [hvr-ghc]}}
     - compiler: "ghc-head"
       env: GHCHEAD=true
-      addons: {apt: {packages: [*apt_packages,cabal-install-head,ghc-head], 
sources: [hvr-ghc]}}
+      addons: {apt: {packages: 
[ghc-ppa-tools,cabal-install-head,ghc-head,freeglut3-dev], sources: [hvr-ghc]}}
 
   allow_failures:
     - compiler: "ghc-head"
-    - compiler: "ghc-8.6.1"
 
 before_install:
-  - HC=${CC}
+  - HC=/opt/ghc/bin/${CC}
   - HCPKG=${HC/ghc/ghc-pkg}
   - unset CC
-  - export HAPPYVER=1.19.5
-  - export ALEXVER=3.1.7
-  - export HLINTVER=2.0.9
-  - mkdir ~/.hlint
-  - curl -L 
https://github.com/ndmitchell/hlint/releases/download/v$HLINTVER/hlint-$HLINTVER-x86_64-linux.tar.gz
 | tar -xz --strip-components=1 -C ~/.hlint
+  - CABAL=/opt/ghc/bin/cabal
+  - CABALHOME=$HOME/.cabal
+  - export PATH="$CABALHOME/bin:$PATH"
   - ROOTDIR=$(pwd)
-  - mkdir -p $HOME/.local/bin
-  - 
"PATH=~/.hlint:/opt/ghc/bin:/opt/ghc-ppa-tools/bin:$HOME/local/bin:/opt/happy/$HAPPYVER/bin:/opt/alex/$ALEXVER/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
+  - ${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}
-  - UNCONSTRAINED=${UNCONSTRAINED-true}
-  - NOINSTALLEDCONSTRAINTS=${NOINSTALLEDCONSTRAINTS-false}
+  - TEST=--enable-tests
+  - BENCH=--enable-benchmarks
   - GHCHEAD=${GHCHEAD-false}
-  - travis_retry cabal update -v
-  - "sed -i.bak 's/^jobs:/-- jobs:/' ${HOME}/.cabal/config"
+  - travis_retry ${CABAL} update -v
+  - sed -i.bak 's/^jobs:/-- jobs:/' $CABALHOME/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 's/-- allow-newer: .*/allow-newer: *:base/' ${HOME}/.cabal/config
-      for pkg in $($HCPKG list --simple-output); do pkg=$(echo $pkg | sed 
's/-[^-]*$//'); sed -i "s/allow-newer: /allow-newer: *:$pkg, /" 
${HOME}/.cabal/config; done
+      sed -i 's/-- allow-newer: .*/allow-newer: *:base/' $CABALHOME/config
+      for pkg in $($HCPKG list --simple-output); do pkg=$(echo $pkg | sed 
's/-[^-]*$//'); sed -i "s/allow-newer: /allow-newer: *:$pkg, /" 
$CABALHOME/config; done
 
-      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
+      echo 'repository head.hackage'                                           
             >> $CABALHOME/config
+      echo '   url: http://head.hackage.haskell.org/'                          
             >> $CABALHOME/config
+      echo '   secure: True'                                                   
             >> $CABALHOME/config
+      echo '   root-keys: 
07c59cb65787dedfaef5bd5f987ceb5f7e5ebf88b904bbd4c5cbdeb2ff71b740' >> 
$CABALHOME/config
+      echo '              
2e8555dde16ebd8df076f1a8ef13b8f14c66bad8eafefd7d9e37d0ed711821fb' >> 
$CABALHOME/config
+      echo '              
8f79fd2389ab2967354407ec852cbe73f2e8635793ac446d09461ffb99527f6e' >> 
$CABALHOME/config
+      echo '   key-threshold: 3'                                               
             >> $CABALHOME.config
 
-      grep -Ev -- '^\s*--' ${HOME}/.cabal/config | grep -Ev '^\s*$'
+      grep -Ev -- '^\s*--' $CABALHOME/config | grep -Ev '^\s*$'
 
-      cabal new-update head.hackage -v
+      ${CABAL} new-update head.hackage -v
     fi
-  - grep -Ev -- '^\s*--' ${HOME}/.cabal/config | grep -Ev '^\s*$'
-  - "printf 'packages: \".\" \"./examples\" \"./lens-properties\"\\n' > 
cabal.project"
+  - grep -Ev -- '^\s*--' $CABALHOME/config | grep -Ev '^\s*$'
+  - if [ $HCNUMVER -eq 80604 ] ; then ${CABAL} new-install -w ${HC} -j2 hlint 
--constraint='hlint ==2.1.*' ; fi
+  - rm -f cabal.project
+  - touch cabal.project
+  - "printf 'packages: \".\"\\n' >> cabal.project"
+  - "printf 'packages: \"./examples\"\\n' >> cabal.project"
+  - "printf 'packages: \"./lens-properties\"\\n' >> cabal.project"
+  - "printf 'write-ghc-environment-files: always\\n' >> cabal.project"
   - touch cabal.project.local
-  - "if ! $NOINSTALLEDCONSTRAINTS; then for pkg in $($HCPKG list 
--simple-output); do echo $pkg | sed 's/^/constraints: /' | sed 's/-[^-]*$/ 
installed/' >> cabal.project.local; done; fi"
+  - "for pkg in $($HCPKG list --simple-output); do echo $pkg | sed 
's/-[^-]*$//' | grep -vE -- '^(lens|lens-examples|lens-properties)$' | 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
-  - if [ -f "./examples/configure.ac" ]; then
-      (cd "./examples" && autoreconf -i);
-    fi
-  - if [ -f "./lens-properties/configure.ac" ]; then
-      (cd "./lens-properties" && autoreconf -i);
-    fi
+  - if [ -f "./configure.ac" ]; then (cd "." && autoreconf -i); fi
+  - if [ -f "./examples/configure.ac" ]; then (cd "./examples" && autoreconf 
-i); fi
+  - if [ -f "./lens-properties/configure.ac" ]; then (cd "./lens-properties" 
&& autoreconf -i); fi
   - rm -f cabal.project.freeze
-  - cabal new-build -w ${HC} ${TEST} ${BENCH} --project-file="cabal.project" 
--dep -j2 all
+  - ${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
   - rm -rf .ghc.environment.* "."/dist "./examples"/dist 
"./lens-properties"/dist
   - DISTDIR=$(mktemp -d /tmp/dist-test.XXXX)
 
@@ -145,33 +126,38 @@
 # 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)
-  - (cd "./examples" && cabal sdist)
-  - (cd "./lens-properties" && cabal sdist)
-  - mv "."/dist/lens-*.tar.gz "./examples"/dist/lens-examples-*.tar.gz 
"./lens-properties"/dist/lens-properties-*.tar.gz ${DISTDIR}/
+  - ${CABAL} new-sdist all
+  - mv dist-newstyle/sdist/*.tar.gz ${DISTDIR}/
   - cd ${DISTDIR} || false
   - find . -maxdepth 1 -name '*.tar.gz' -exec tar -xvf '{}' \;
-  - "printf 'packages: lens-*/*.cabal lens-examples-*/*.cabal 
lens-properties-*/*.cabal\\n' > cabal.project"
+  - rm -f cabal.project
+  - touch cabal.project
+  - "printf 'packages: \"lens-*/*.cabal\"\\n' >> cabal.project"
+  - "printf 'packages: \"lens-examples-*/*.cabal\"\\n' >> cabal.project"
+  - "printf 'packages: \"lens-properties-*/*.cabal\"\\n' >> cabal.project"
+  - "printf 'write-ghc-environment-files: always\\n' >> cabal.project"
   - touch cabal.project.local
-  - "if ! $NOINSTALLEDCONSTRAINTS; then for pkg in $($HCPKG list 
--simple-output); do echo $pkg | sed 's/^/constraints: /' | sed 's/-[^-]*$/ 
installed/' >> cabal.project.local; done; fi"
+  - "for pkg in $($HCPKG list --simple-output); do echo $pkg | sed 
's/-[^-]*$//' | grep -vE -- '^(lens|lens-examples|lens-properties)$' | sed 
's/^/constraints: /' | sed 's/$/ installed/' >> cabal.project.local; done"
   - cat cabal.project || true
   - cat cabal.project.local || true
 
   # 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} new-build -w ${HC} ${TEST} ${BENCH} all
+  - if [ "x$TEST" = "x--enable-tests" ]; then ${CABAL} new-test -w ${HC} 
${TEST} ${BENCH} all; fi
+
+  # hlint
+  - if [ $HCNUMVER -eq 80604 ] ; then (cd lens-* && hlint --cpp-ansi 
--cpp-define=HLINT src) ; fi
+  - if [ $HCNUMVER -eq 80604 ] ; then (cd lens-examples-* && hlint --cpp-ansi 
--cpp-define=HLINT .) ; fi
+  - if [ $HCNUMVER -eq 80604 ] ; then (cd lens-examples-* && hlint --cpp-ansi 
--cpp-define=HLINT .) ; fi
+  - if [ $HCNUMVER -eq 80604 ] ; then (cd lens-properties-* && hlint 
--cpp-ansi --cpp-define=HLINT src) ; fi
 
   # cabal check
-  - (cd lens-* && cabal check)
-  - (cd lens-examples-* && cabal check)
-  - (cd lens-properties-* && cabal check)
+  - (cd lens-* && ${CABAL} check)
+  - (cd lens-examples-* && ${CABAL} check)
+  - (cd lens-properties-* && ${CABAL} check)
 
   # haddock
-  - rm -rf ./dist-newstyle
-  - if $HADDOCK; then cabal new-haddock -w ${HC} ${TEST} ${BENCH} all; else 
echo "Skipping haddock generation";fi
-
-  # hlint
-  - (cd lens-* && hlint src --cpp-define=HLINT --cpp-ansi)
+  - ${CABAL} new-haddock -w ${HC} ${TEST} ${BENCH} all
 
-# REGENDATA 
["-o",".travis.yml","--ghc-head","--irc-channel=irc.freenode.org#haskell-lens","--no-no-tests-no-bench","--no-unconstrained","cabal.project"]
+# REGENDATA 
["--output=.travis.yml","--config=cabal.haskell-ci","cabal.project"]
 # EOF
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/CHANGELOG.markdown 
new/lens-4.17.1/CHANGELOG.markdown
--- old/lens-4.17/CHANGELOG.markdown    2018-07-03 19:04:18.000000000 +0200
+++ new/lens-4.17.1/CHANGELOG.markdown  2001-09-09 03:46:40.000000000 +0200
@@ -1,3 +1,14 @@
+4.17.1 [2019.04.26]
+-------------------
+* Support `th-abstraction-0.3.0.0` or later.
+* Only incur `semigroups` and `void` dependencies on old GHCs.
+* Add `holes1Of`.
+* Add `locally` (https://github.com/ekmett/lens/pull/829).
+* Add `ilocally` (https://github.com/ekmett/lens/pull/836).
+* Add a third `Prism` law.
+* Add `gplate1`.
+* Add `Wrapped`/`Rewrapped` instances for `Data.Monoid.Ap`.
+
 4.17 [2018.07.03]
 -----------------
 * Allow building with GHC 8.6.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/HLint.hs new/lens-4.17.1/HLint.hs
--- old/lens-4.17/HLint.hs      2018-07-03 19:04:18.000000000 +0200
+++ new/lens-4.17.1/HLint.hs    2001-09-09 03:46:40.000000000 +0200
@@ -5,6 +5,8 @@
 ignore "Use >=>"
 ignore "Use const"
 ignore "Use module export list"
+ignore "Use lambda-case"
+ignore "Use tuple-section"
 
 -- Used hlint --find src/ in the lens repo to generate this:
 infixl 9 :>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/Setup.lhs new/lens-4.17.1/Setup.lhs
--- old/lens-4.17/Setup.lhs     2018-07-03 19:04:18.000000000 +0200
+++ new/lens-4.17.1/Setup.lhs   2001-09-09 03:46:40.000000000 +0200
@@ -1,24 +1,17 @@
 \begin{code}
 {-# LANGUAGE CPP #-}
-{-# LANGUAGE OverloadedStrings #-}
+{-# OPTIONS_GHC -Wall #-}
 module Main (main) where
 
 #ifndef MIN_VERSION_cabal_doctest
 #define MIN_VERSION_cabal_doctest(x,y,z) 0
 #endif
 
--- haddock stuff
-import Distribution.Package ( Package (..), packageName )
-import Distribution.Simple ( defaultMainWithHooks, UserHooks(..), 
simpleUserHooks )
-import Distribution.Simple.Setup (Flag (..), HaddockFlags, haddockDistPref)
-import Distribution.Simple.Utils (copyFiles)
-import Distribution.Verbosity (normal)
-import Distribution.Text ( display )
-import System.FilePath ( (</>) )
-
 #if MIN_VERSION_cabal_doctest(1,0,0)
 
-import Distribution.Extra.Doctest ( doctestsUserHooks )
+import Distribution.Extra.Doctest ( defaultMainWithDoctests )
+main :: IO ()
+main = defaultMainWithDoctests "doctests"
 
 #else
 
@@ -31,25 +24,11 @@
 import Warning ()
 #endif
 
-doctestsUserHooks :: String -> UserHooks
-doctestsUserHooks _ = simpleUserHooks
-
-#endif
-
-haddockOutputDir :: Package p => HaddockFlags -> p -> FilePath
-haddockOutputDir flags pkg = destDir where
-  baseDir = case haddockDistPref flags of
-    NoFlag -> "."
-    Flag x -> x
-  destDir = baseDir </> "doc" </> "html" </> display (packageName pkg)
+import Distribution.Simple
 
 main :: IO ()
-main = defaultMainWithHooks duh
-  { postHaddock = \args flags pkg lbi -> do
-     copyFiles normal (haddockOutputDir flags pkg) [("images","Hierarchy.png")]
-     postHaddock duh args flags pkg lbi
-  }
-  where
-    duh = doctestsUserHooks "doctests"
+main = defaultMain
+
+#endif
 
 \end{code}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/examples/Plates.hs 
new/lens-4.17.1/examples/Plates.hs
--- old/lens-4.17/examples/Plates.hs    2018-07-03 19:04:18.000000000 +0200
+++ new/lens-4.17.1/examples/Plates.hs  2001-09-09 03:46:40.000000000 +0200
@@ -1,23 +1,26 @@
-{-# LANGUAGE MultiParamTypeClasses, DeriveGeneric, DeriveDataTypeable #-}
+{-# LANGUAGE CPP, MultiParamTypeClasses, DeriveGeneric, DeriveDataTypeable #-}
+module Plates where
+
+#if !(MIN_VERSION_base(4,8,0))
 import Control.Applicative
+#endif
 import Control.Lens
 import GHC.Generics
 import Data.Data
-import Data.Data.Lens
 
 data Expr = Var Int | Pos Expr String | Neg Expr | Add Expr Expr deriving 
(Eq,Ord,Show,Read,Generic,Data,Typeable)
 data Stmt = Seq [Stmt] | Sel [Expr] | Let String Expr deriving 
(Eq,Ord,Show,Read,Generic,Data,Typeable)
 
 instance Plated Expr where
-  plate f (Var x  ) = pure (Var x)
+  plate _ (Var x  ) = pure (Var x)
   plate f (Pos x y) = Pos <$> f x <*> pure y
   plate f (Neg x  ) = Neg <$> f x
   plate f (Add x y) = Add <$> f x <*> f y
 
 instance Plated Stmt where
-  plate f (Seq xs) = Seq <$> traverse f xs
-  plate f (Sel xs) = pure (Sel xs)
-  plate f (Let x y) = pure (Let x y)
+  plate f (Seq xs)  = Seq <$> traverse f xs
+  plate _ (Sel xs)  = pure (Sel xs)
+  plate _ (Let x y) = pure (Let x y)
 
 exprs :: Traversal' Stmt Expr
 exprs f (Seq xs)  = Seq <$> traverse (exprs f) xs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/examples/Pong.hs 
new/lens-4.17.1/examples/Pong.hs
--- old/lens-4.17/examples/Pong.hs      2018-07-03 19:04:18.000000000 +0200
+++ new/lens-4.17.1/examples/Pong.hs    2001-09-09 03:46:40.000000000 +0200
@@ -1,4 +1,4 @@
-{-# LANGUAGE TemplateHaskell, Rank2Types, NoMonomorphismRestriction #-}
+{-# LANGUAGE CPP, TemplateHaskell, Rank2Types, NoMonomorphismRestriction #-}
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  Main
@@ -12,14 +12,17 @@
 -----------------------------------------------------------------------------
 module Main where
 
-import Control.Applicative ((<$>), (<*>))
-import Control.Lens
+#if !(MIN_VERSION_base(4,8,0))
+import Control.Applicative ((<$>))
+#endif
+import Control.Lens hiding ((:>), at)
 import Control.Monad.State (State, execState, get)
 import Control.Monad (when)
 
-import Data.Set (Set, member, empty, insert, delete)
+import Data.Set (Set, empty)
+import Data.Stream.Infinite (Stream(..))
 
-import Graphics.Gloss
+import Graphics.Gloss hiding (display)
 import qualified Graphics.Gloss.Data.Point.Arithmetic as Pt
 import Graphics.Gloss.Interface.Pure.Game
 
@@ -27,9 +30,15 @@
 
 -- Some global constants
 
+gameSize :: Float
 gameSize        = 300
+
+windowWidth, windowHeight :: Int
 windowWidth     = 800
 windowHeight    = 600
+
+ballRadius, speedIncrease, losingAccuracy, winningAccuracy,
+  initialSpeed, paddleWidth, paddleHeight, paddleSpeed :: Float
 ballRadius      = 0.02
 speedIncrease   = 1.2
 losingAccuracy  = 0.9
@@ -38,6 +47,8 @@
 paddleWidth     = 0.02
 paddleHeight    = 0.3
 paddleSpeed     = 1
+
+textSize :: Float
 textSize        = 0.001
 
 -- Pure data type for representing the game state
@@ -48,7 +59,7 @@
   , _paddle1   :: Float
   , _paddle2   :: Float
   , _score     :: (Int, Int)
-  , _vectors   :: [Vector]
+  , _vectors   :: Stream Vector
 
   -- Since gloss doesn't cover this, we store the set of pressed keys
   , _keys      :: Set Key
@@ -58,11 +69,14 @@
 makeLenses ''Pong
 
 -- Renamed tuple lenses for enhanced clarity with points/vectors
+_x :: Field1 s t a b => Lens s t a b
 _x = _1
+
+_y :: Field2 s t a b => Lens s t a b
 _y = _2
 
 initial :: Pong
-initial = Pong (0, 0) (0, 0) 0 0 (0, 0) [] empty
+initial = Pong (0, 0) (0, 0) 0 0 (0, 0) (return (0, 0)) empty
 
 -- Calculate the y position at which the ball will next hit (on player2's side)
 hitPos :: Point -> Vector -> Float
@@ -174,7 +188,7 @@
 -- Retrieve a speed from the list, dropping it in the process
 nextSpeed :: State Pong Vector
 nextSpeed = do
-  v:vs <- use vectors
+  v:>vs <- use vectors
   vectors .= vs
   return v
 
@@ -192,7 +206,7 @@
   ]
   where
     paddleX = 1 + paddleWidth/2
-    p `at` (x,y) = translate x y p; infixr 1 `at`
+    po `at` (x,y) = translate x y po; infixr 1 `at`
 
 drawPaddle :: Picture
 drawPaddle = rectangleSolid paddleWidth paddleHeight
@@ -211,8 +225,9 @@
 
 -- The main program action
 
+main :: IO ()
 main = do
-  v:vs <- startingSpeeds
+  v:>vs <- startingSpeeds
   let world = ballSpeed .~ v $ vectors .~ vs $ initial
   play display backColor fps world draw handle update
 
@@ -223,12 +238,16 @@
 
 -- Generate the random list of starting speeds
 
-startingSpeeds :: IO [Vector]
+startingSpeeds :: IO (Stream Vector)
 startingSpeeds = do
   rs <- randomRs (-initialSpeed, initialSpeed) <$> newStdGen
-  return . interleave $ filter ((> 0.2) . abs) rs
+  return . listToStream . interleave $ filter ((> 0.2) . abs) rs
 
   where
     interleave :: [a] -> [(a,a)]
     interleave (x:y:xs) = (x,y) : interleave xs
     interleave _        = []
+
+    -- Assumes the list is infinite.
+    listToStream :: [a] -> Stream a
+    listToStream = foldr (:>) (error "Finite list")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/examples/Turtle.hs 
new/lens-4.17.1/examples/Turtle.hs
--- old/lens-4.17/examples/Turtle.hs    2018-07-03 19:04:18.000000000 +0200
+++ new/lens-4.17.1/examples/Turtle.hs  2001-09-09 03:46:40.000000000 +0200
@@ -11,7 +11,7 @@
 module Turtle where
 
 import Control.Lens
-import Data.Default
+import Data.Default.Class
 
 data Point = Point
   { __x, __y :: Double
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/examples/lens-examples.cabal 
new/lens-4.17.1/examples/lens-examples.cabal
--- old/lens-4.17/examples/lens-examples.cabal  2018-07-03 19:04:18.000000000 
+0200
+++ new/lens-4.17.1/examples/lens-examples.cabal        2001-09-09 
03:46:40.000000000 +0200
@@ -2,7 +2,7 @@
 category:      Data, Lenses
 version:       0.1
 license:       BSD3
-cabal-version: >= 1.8
+cabal-version: >= 1.10
 license-file:  LICENSE
 author:        Niklas Haas
 maintainer:    Edward A. Kmett <[email protected]>
@@ -22,8 +22,8 @@
              , GHC == 7.10.3
              , GHC == 8.0.2
              , GHC == 8.2.2
-             , GHC == 8.4.3
-             , GHC == 8.6.1
+             , GHC == 8.4.4
+             , GHC == 8.6.4
 
 source-repository head
   type: git
@@ -32,15 +32,33 @@
 flag pong
   default: True
 
+library
+  exposed-modules:
+    Aeson
+    Plates
+    Turtle
+  build-depends:
+    aeson,
+    base       >= 4.5      && < 5,
+    bytestring >= 0.9.1.10 && < 0.11,
+    data-default-class,
+    ghc-prim,
+    lens
+  default-language: Haskell2010
+  ghc-options: -Wall
+
 executable lens-pong
   if !flag(pong)
     buildable: False
 
   build-depends:
     base       >= 4.5   && < 5,
-    containers >= 0.4   && < 0.6,
-    gloss      >= 1.12  && < 1.13,
+    containers >= 0.4   && < 0.7,
+    gloss      >= 1.12  && < 1.14,
     lens,
     mtl        >= 2.0.1 && < 2.3,
-    random     >= 1.0   && < 1.2
+    random     >= 1.0   && < 1.2,
+    streams    >= 3.3   && < 4
   main-is: Pong.hs
+  default-language: Haskell2010
+  ghc-options: -Wall
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/include/lens-common.h 
new/lens-4.17.1/include/lens-common.h
--- old/lens-4.17/include/lens-common.h 1970-01-01 01:00:00.000000000 +0100
+++ new/lens-4.17.1/include/lens-common.h       2001-09-09 03:46:40.000000000 
+0200
@@ -0,0 +1,10 @@
+#ifndef LENS_COMMON_H
+#define LENS_COMMON_H
+
+#if __GLASGOW_HASKELL__ >= 806
+# define KVS(kvs) kvs
+#else
+# define KVS(kvs)
+#endif
+
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/lens-properties/lens-properties.cabal 
new/lens-4.17.1/lens-properties/lens-properties.cabal
--- old/lens-4.17/lens-properties/lens-properties.cabal 1970-01-01 
01:00:00.000000000 +0100
+++ new/lens-4.17.1/lens-properties/lens-properties.cabal       2001-09-09 
03:46:40.000000000 +0200
@@ -0,0 +1,43 @@
+name:          lens-properties
+category:      Data, Lenses
+version:       4.11.1
+license:       BSD3
+cabal-version: >= 1.8
+license-file:  LICENSE
+author:        Edward Kmett and Oliver Charles
+maintainer:    Edward Kmett <[email protected]>
+stability:     provisional
+homepage:      http://github.com/ekmett/lens/
+bug-reports:   http://github.com/ekmett/lens/issues
+copyright:     Copyright (C) 2012-2015 Edward A. Kmett, Copyright (C) 2014 
Oliver Charles
+synopsis:      QuickCheck properties for lens
+description:   QuickCheck properties for lens.
+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.4
+             , GHC == 8.6.4
+
+extra-source-files:
+  .hlint.yaml
+  CHANGELOG.markdown
+
+source-repository head
+  type: git
+  location: git://github.com/ekmett/lens.git
+
+library
+  build-depends:
+    base         >= 4.5 && < 5,
+    lens         >= 4   && < 5,
+    QuickCheck   >= 2.4 && < 2.14,
+    transformers >= 0.2 && < 0.6
+
+  exposed-modules:
+    Control.Lens.Properties
+
+  hs-source-dirs: src
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/lens.cabal new/lens-4.17.1/lens.cabal
--- old/lens-4.17/lens.cabal    2018-07-03 19:04:18.000000000 +0200
+++ new/lens-4.17.1/lens.cabal  2001-09-09 03:46:40.000000000 +0200
@@ -1,8 +1,8 @@
 name:          lens
 category:      Data, Lenses, Generics
-version:       4.17
+version:       4.17.1
 license:       BSD2
-cabal-version: >= 1.8
+cabal-version: 1.18
 license-file:  LICENSE
 author:        Edward A. Kmett
 maintainer:    Edward A. Kmett <[email protected]>
@@ -18,8 +18,8 @@
              , GHC == 7.10.3
              , GHC == 8.0.2
              , GHC == 8.2.2
-             , GHC == 8.4.3
-             , GHC == 8.6.1
+             , GHC == 8.4.4
+             , GHC == 8.6.4
 synopsis:      Lenses, Folds and Traversals
 description:
   This package comes \"Batteries Included\" with many useful lenses for the 
types
@@ -103,10 +103,11 @@
   examples/lens-examples.cabal
   examples/*.hs
   examples/*.lhs
-  images/*.png
+  include/*.h
   lens-properties/CHANGELOG.markdown
   lens-properties/LICENSE
   lens-properties/Setup.hs
+  lens-properties/lens-properties.cabal
   travis/cabal-apt-install
   travis/config
   HLint.hs
@@ -115,6 +116,8 @@
   CHANGELOG.markdown
   README.markdown
   SUPPORT.markdown
+extra-doc-files:
+  images/*.png
 
 source-repository head
   type: git
@@ -212,22 +215,24 @@
     profunctors               >= 5.2.1    && < 6,
     reflection                >= 2.1      && < 3,
     semigroupoids             >= 5        && < 6,
-    semigroups                >= 0.8.4    && < 1,
     tagged                    >= 0.4.4    && < 1,
     template-haskell          >= 2.4      && < 2.15,
-    th-abstraction            >= 0.2.1    && < 0.3,
+    th-abstraction            >= 0.2.1    && < 0.4,
     text                      >= 0.11     && < 1.3,
     transformers              >= 0.2      && < 0.6,
     transformers-compat       >= 0.4      && < 1,
     unordered-containers      >= 0.2.4    && < 0.3,
-    vector                    >= 0.9      && < 0.13,
-    void                      >= 0.5      && < 1
+    vector                    >= 0.9      && < 0.13
 
   if impl(ghc < 8.0)
-    build-depends: generic-deriving >= 1.10 && < 2
+    build-depends:
+      generic-deriving >= 1.10  && < 2,
+      semigroups       >= 0.8.4 && < 1
 
   if impl(ghc < 7.9)
-    build-depends: nats >= 0.1 && < 1.2
+    build-depends:
+      nats >= 0.1 && < 1.2,
+      void >= 0.5 && < 1
 
   exposed-modules:
     Control.Exception.Lens
@@ -345,6 +350,10 @@
 
   hs-source-dirs: src
 
+  include-dirs: include
+
+  default-language: Haskell2010
+
 -- Verify that Template Haskell expansion works
 test-suite templates
   type: exitcode-stdio-1.0
@@ -352,6 +361,7 @@
   other-modules: T799
   ghc-options: -Wall -threaded
   hs-source-dirs: tests
+  default-language: Haskell2010
 
   if flag(dump-splices)
     ghc-options: -ddump-splices
@@ -371,6 +381,8 @@
   hs-source-dirs:
     tests
     lens-properties/src
+  include-dirs: include
+  default-language: Haskell2010
   if !flag(test-properties)
     buildable: False
   else
@@ -388,6 +400,7 @@
   main-is: hunit.hs
   ghc-options: -w -threaded -rtsopts -with-rtsopts=-N
   hs-source-dirs: tests
+  default-language: Haskell2010
 
   if !flag(test-hunit)
     buildable: False
@@ -408,6 +421,7 @@
   main-is:           doctests.hs
   ghc-options:       -Wall -threaded
   hs-source-dirs:    tests
+  default-language:  Haskell2010
   x-doctest-options: --fast
 
   if flag(trustworthy) && impl(ghc>=7.2)
@@ -438,10 +452,11 @@
 
 -- Basic benchmarks for the uniplate-style combinators
 benchmark plated
-  type:           exitcode-stdio-1.0
-  main-is:        plated.hs
-  ghc-options:    -Wall -O2 -threaded -fdicts-cheap -funbox-strict-fields
-  hs-source-dirs: benchmarks
+  type:             exitcode-stdio-1.0
+  main-is:          plated.hs
+  ghc-options:      -Wall -O2 -threaded -fdicts-cheap -funbox-strict-fields
+  hs-source-dirs:   benchmarks
+  default-language: Haskell2010
   build-depends:
     base,
     comonad,
@@ -457,10 +472,11 @@
 
 -- Benchmarking alongside variants
 benchmark alongside
-  type:           exitcode-stdio-1.0
-  main-is:        alongside.hs
-  ghc-options:    -w -O2 -threaded -fdicts-cheap -funbox-strict-fields
-  hs-source-dirs: benchmarks
+  type:             exitcode-stdio-1.0
+  main-is:          alongside.hs
+  ghc-options:      -w -O2 -threaded -fdicts-cheap -funbox-strict-fields
+  hs-source-dirs:   benchmarks
+  default-language: Haskell2010
   build-depends:
     base,
     comonad >= 4,
@@ -471,10 +487,11 @@
 
 -- Benchmarking folds
 benchmark folds
-  type:           exitcode-stdio-1.0
-  main-is:        folds.hs
-  ghc-options:    -w -O2 -threaded -fdicts-cheap -funbox-strict-fields
-  hs-source-dirs: benchmarks
+  type:             exitcode-stdio-1.0
+  main-is:          folds.hs
+  ghc-options:      -w -O2 -threaded -fdicts-cheap -funbox-strict-fields
+  hs-source-dirs:   benchmarks
+  default-language: Haskell2010
   build-depends:
     base,
     criterion,
@@ -486,10 +503,11 @@
 
 -- Benchmarking traversals
 benchmark traversals
-  type:           exitcode-stdio-1.0
-  main-is:        traversals.hs
-  ghc-options:    -w -O2 -threaded -fdicts-cheap -funbox-strict-fields
-  hs-source-dirs: benchmarks
+  type:             exitcode-stdio-1.0
+  main-is:          traversals.hs
+  ghc-options:      -w -O2 -threaded -fdicts-cheap -funbox-strict-fields
+  hs-source-dirs:   benchmarks
+  default-language: Haskell2010
   build-depends:
     base,
     criterion,
@@ -502,10 +520,11 @@
 
 -- Benchmarking unsafe implementation strategies
 benchmark unsafe
-  type:           exitcode-stdio-1.0
-  main-is:        unsafe.hs
-  ghc-options:    -w -O2 -threaded -fdicts-cheap -funbox-strict-fields
-  hs-source-dirs: benchmarks
+  type:             exitcode-stdio-1.0
+  main-is:          unsafe.hs
+  ghc-options:      -w -O2 -threaded -fdicts-cheap -funbox-strict-fields
+  hs-source-dirs:   benchmarks
+  default-language: Haskell2010
   build-depends:
     base,
     comonad >= 4,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/src/Control/Lens/Cons.hs 
new/lens-4.17.1/src/Control/Lens/Cons.hs
--- old/lens-4.17/src/Control/Lens/Cons.hs      2018-07-03 19:04:18.000000000 
+0200
+++ new/lens-4.17.1/src/Control/Lens/Cons.hs    2001-09-09 03:46:40.000000000 
+0200
@@ -2,7 +2,6 @@
 {-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE FunctionalDependencies #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 #ifdef TRUSTWORTHY
@@ -125,7 +124,7 @@
   {-# INLINE _Cons #-}
 
 instance Cons (ZipList a) (ZipList b) a b where
-  _Cons = withPrism listCons $ \listReview listPreview -> 
+  _Cons = withPrism listCons $ \listReview listPreview ->
     prism (coerce' listReview) (coerce' listPreview) where
 
     listCons :: Prism [a] [b] (a, [a]) (b, [b])
@@ -359,7 +358,7 @@
   {-# INLINE _Snoc #-}
 
 instance Snoc (ZipList a) (ZipList b) a b where
-  _Snoc = withPrism listSnoc $ \listReview listPreview -> 
+  _Snoc = withPrism listSnoc $ \listReview listPreview ->
     prism (coerce' listReview) (coerce' listPreview) where
 
     listSnoc :: Prism [a] [b] ([a], a) ([b], b)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/src/Control/Lens/Each.hs 
new/lens-4.17.1/src/Control/Lens/Each.hs
--- old/lens-4.17/src/Control/Lens/Each.hs      2018-07-03 19:04:18.000000000 
+0200
+++ new/lens-4.17.1/src/Control/Lens/Each.hs    2001-09-09 03:46:40.000000000 
+0200
@@ -4,7 +4,6 @@
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE DefaultSignatures #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE FunctionalDependencies #-}
 #ifdef TRUSTWORTHY
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/src/Control/Lens/Empty.hs 
new/lens-4.17.1/src/Control/Lens/Empty.hs
--- old/lens-4.17/src/Control/Lens/Empty.hs     2018-07-03 19:04:18.000000000 
+0200
+++ new/lens-4.17.1/src/Control/Lens/Empty.hs   2001-09-09 03:46:40.000000000 
+0200
@@ -1,5 +1,4 @@
 {-# LANGUAGE CPP #-}
-{-# LANGUAGE MagicHash #-}
 {-# LANGUAGE DefaultSignatures #-}
 
 #ifdef TRUSTWORTHY
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/src/Control/Lens/Equality.hs 
new/lens-4.17.1/src/Control/Lens/Equality.hs
--- old/lens-4.17/src/Control/Lens/Equality.hs  2018-07-03 19:04:18.000000000 
+0200
+++ new/lens-4.17.1/src/Control/Lens/Equality.hs        2001-09-09 
03:46:40.000000000 +0200
@@ -42,6 +42,8 @@
 -- $setup
 -- >>> import Control.Lens
 
+#include "lens-common.h"
+
 -----------------------------------------------------------------------------
 -- Equality
 -----------------------------------------------------------------------------
@@ -73,7 +75,7 @@
 
 -- | We can use 'Equality' to do substitution into anything.
 #if __GLASGOW_HASKELL__ >= 706
-mapEq :: forall (s :: k1) (t :: k2) (a :: k1) (b :: k2) (f :: k1 -> *) . 
AnEquality s t a b -> f s -> f a
+mapEq :: forall KVS(k1 k2) (s :: k1) (t :: k2) (a :: k1) (b :: k2) (f :: k1 -> 
*) . AnEquality s t a b -> f s -> f a
 #else
 mapEq :: AnEquality s t a b -> f s -> f a
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/src/Control/Lens/Fold.hs 
new/lens-4.17.1/src/Control/Lens/Fold.hs
--- old/lens-4.17/src/Control/Lens/Fold.hs      2018-07-03 19:04:18.000000000 
+0200
+++ new/lens-4.17.1/src/Control/Lens/Fold.hs    2001-09-09 03:46:40.000000000 
+0200
@@ -339,7 +339,7 @@
   go a = g a .> go (f a)
 {-# INLINE iterated #-}
 
--- | Obtain an 'Fold' that can be composed with to filter another 'Lens', 
'Iso', 'Getter', 'Fold' (or 'Traversal').
+-- | Obtain a 'Fold' that can be composed with to filter another 'Lens', 
'Iso', 'Getter', 'Fold' (or 'Traversal').
 --
 -- Note: This is /not/ a legal 'Traversal', unless you are very careful not to 
invalidate the predicate on the target.
 --
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/src/Control/Lens/Indexed.hs 
new/lens-4.17.1/src/Control/Lens/Indexed.hs
--- old/lens-4.17/src/Control/Lens/Indexed.hs   2018-07-03 19:04:18.000000000 
+0200
+++ new/lens-4.17.1/src/Control/Lens/Indexed.hs 2001-09-09 03:46:40.000000000 
+0200
@@ -6,7 +6,6 @@
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE DefaultSignatures #-}
 {-# LANGUAGE UndecidableInstances #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE FunctionalDependencies #-}
 
 #ifdef TRUSTWORTHY
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/src/Control/Lens/Internal/Bazaar.hs 
new/lens-4.17.1/src/Control/Lens/Internal/Bazaar.hs
--- old/lens-4.17/src/Control/Lens/Internal/Bazaar.hs   2018-07-03 
19:04:18.000000000 +0200
+++ new/lens-4.17.1/src/Control/Lens/Internal/Bazaar.hs 2001-09-09 
03:46:40.000000000 +0200
@@ -2,7 +2,6 @@
 {-# LANGUAGE Rank2Types #-}
 {-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE FunctionalDependencies #-}
 #if __GLASGOW_HASKELL__ >= 707
 {-# LANGUAGE RoleAnnotations #-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/src/Control/Lens/Internal/Context.hs 
new/lens-4.17.1/src/Control/Lens/Internal/Context.hs
--- old/lens-4.17/src/Control/Lens/Internal/Context.hs  2018-07-03 
19:04:18.000000000 +0200
+++ new/lens-4.17.1/src/Control/Lens/Internal/Context.hs        2001-09-09 
03:46:40.000000000 +0200
@@ -1,10 +1,8 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE Rank2Types #-}
 {-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE KindSignatures #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE FunctionalDependencies #-}
 #if __GLASGOW_HASKELL__ >= 707
 {-# LANGUAGE RoleAnnotations #-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/src/Control/Lens/Internal/Exception.hs 
new/lens-4.17.1/src/Control/Lens/Internal/Exception.hs
--- old/lens-4.17/src/Control/Lens/Internal/Exception.hs        2018-07-03 
19:04:18.000000000 +0200
+++ new/lens-4.17.1/src/Control/Lens/Internal/Exception.hs      2001-09-09 
03:46:40.000000000 +0200
@@ -1,6 +1,5 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE FunctionalDependencies #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE DeriveDataTypeable #-}
@@ -190,7 +189,15 @@
   showsPrec d _ = showParen (d > 10) $ showString "Handling ..."
   {-# INLINE showsPrec #-}
 
-instance (Reifies s (SomeException -> Maybe a), Typeable (Handling a s m)) => 
Exception (Handling a s m) where
+instance ( Reifies s (SomeException -> Maybe a)
+         , Typeable a, Typeable s
+#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 707
+         , Typeable m
+#else
+         , Typeable1 m
+#endif
+         )
+    => Exception (Handling a (s :: *) m) where
   toException _ = SomeException HandlingException
   {-# INLINE toException #-}
   fromException = fmap Handling . reflect (Proxy :: Proxy s)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/src/Control/Lens/Internal/Fold.hs 
new/lens-4.17.1/src/Control/Lens/Internal/Fold.hs
--- old/lens-4.17/src/Control/Lens/Internal/Fold.hs     2018-07-03 
19:04:18.000000000 +0200
+++ new/lens-4.17.1/src/Control/Lens/Internal/Fold.hs   2001-09-09 
03:46:40.000000000 +0200
@@ -192,7 +192,7 @@
 -- Leftmost and Rightmost
 ------------------------------------------------------------------------------
 
--- | Used for 'Control.Lens.Fold.preview'.
+-- | Used for 'Control.Lens.Fold.firstOf'.
 data Leftmost a = LPure | LLeaf a | LStep (Leftmost a)
 
 instance Semigroup (Leftmost a) where
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/src/Control/Lens/Internal/Magma.hs 
new/lens-4.17.1/src/Control/Lens/Internal/Magma.hs
--- old/lens-4.17/src/Control/Lens/Internal/Magma.hs    2018-07-03 
19:04:18.000000000 +0200
+++ new/lens-4.17.1/src/Control/Lens/Internal/Magma.hs  2001-09-09 
03:46:40.000000000 +0200
@@ -1,7 +1,6 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE GADTs #-}
 {-# LANGUAGE Rank2Types #-}
-{-# LANGUAGE KindSignatures #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE UndecidableInstances #-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/src/Control/Lens/Iso.hs 
new/lens-4.17.1/src/Control/Lens/Iso.hs
--- old/lens-4.17/src/Control/Lens/Iso.hs       2018-07-03 19:04:18.000000000 
+0200
+++ new/lens-4.17.1/src/Control/Lens/Iso.hs     2001-09-09 03:46:40.000000000 
+0200
@@ -1,6 +1,5 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE Rank2Types #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE FunctionalDependencies #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/src/Control/Lens/Plated.hs 
new/lens-4.17.1/src/Control/Lens/Plated.hs
--- old/lens-4.17/src/Control/Lens/Plated.hs    2018-07-03 19:04:18.000000000 
+0200
+++ new/lens-4.17.1/src/Control/Lens/Plated.hs  2001-09-09 03:46:40.000000000 
+0200
@@ -6,6 +6,10 @@
 {-# LANGUAGE TypeOperators #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 
+#if __GLASGOW_HASKELL__ >= 706
+{-# LANGUAGE PolyKinds #-} -- gplate1
+#endif
+
 #if __GLASGOW_HASKELL__ < 710
 {-# LANGUAGE OverlappingInstances #-}
 #define OVERLAPPING_PRAGMA
@@ -28,6 +32,10 @@
 #ifndef MIN_VERSION_free
 #define MIN_VERSION_free(x,y,z) 1
 #endif
+
+#ifndef MIN_VERSION_base
+#define MIN_VERSION_base(x,y,z) 1
+#endif
 -------------------------------------------------------------------------------
 -- |
 -- Module      :  Control.Lens.Plated
@@ -96,7 +104,9 @@
 
   -- * Generics
   , gplate
+  , gplate1
   , GPlated
+  , GPlated1
   )
   where
 
@@ -317,7 +327,7 @@
 --
 -- Usually 'transform' is more appropriate, but 'rewrite' can give better
 -- compositionality. Given two single transformations @f@ and @g@, you can
--- construct @\a -> f a `mplus` g a@ which performs both rewrites until a 
fixed point.
+-- construct @\\a -> f a '<|>' g a@ which performs both rewrites until a fixed 
point.
 rewrite :: Plated a => (a -> Maybe a) -> a -> a
 rewrite = rewriteOf plate
 {-# INLINE rewrite #-}
@@ -331,7 +341,7 @@
 --
 -- Usually 'transformOf' is more appropriate, but 'rewriteOf' can give better
 -- compositionality. Given two single transformations @f@ and @g@, you can
--- construct @\a -> f a `mplus` g a@ which performs both rewrites until a 
fixed point.
+-- construct @\\a -> f a '<|>' g a@ which performs both rewrites until a fixed 
point.
 --
 -- @
 -- 'rewriteOf' :: 'Control.Lens.Iso.Iso'' a a       -> (a -> 'Maybe' a) -> a 
-> a
@@ -766,3 +776,75 @@
 instance GPlated a V1 where
   gplate' _ v = v `seq` error "GPlated/V1"
   {-# INLINE gplate' #-}
+
+#if MIN_VERSION_base(4,9,0)
+instance GPlated a (URec b) where
+  gplate' _ = pure
+  {-# INLINE gplate' #-}
+#endif
+
+-- | Implement 'plate' operation for a type using its 'Generic1' instance.
+gplate1 :: (Generic1 f, GPlated1 f (Rep1 f)) => Traversal' (f a) (f a)
+gplate1 f x = GHC.Generics.to1 <$> gplate1' f (GHC.Generics.from1 x)
+{-# INLINE gplate1 #-}
+
+class GPlated1 f g where
+  gplate1' :: Traversal' (g a) (f a)
+
+-- | recursive match
+instance GPlated1 f g => GPlated1 f (M1 i c g) where
+  gplate1' f (M1 x) = M1 <$> gplate1' f x
+  {-# INLINE gplate1' #-}
+
+-- | recursive match
+instance (GPlated1 f g, GPlated1 f h) => GPlated1 f (g :+: h) where
+  gplate1' f (L1 x) = L1 <$> gplate1' f x
+  gplate1' f (R1 x) = R1 <$> gplate1' f x
+  {-# INLINE gplate1' #-}
+
+-- | recursive match
+instance (GPlated1 f g, GPlated1 f h) => GPlated1 f (g :*: h) where
+  gplate1' f (x :*: y) = (:*:) <$> gplate1' f x <*> gplate1' f y
+  {-# INLINE gplate1' #-}
+
+-- | ignored
+instance GPlated1 f (K1 i a) where
+  gplate1' _ = pure
+  {-# INLINE gplate1' #-}
+
+-- | ignored
+instance GPlated1 f Par1 where
+  gplate1' _ = pure
+  {-# INLINE gplate1' #-}
+
+-- | ignored
+instance GPlated1 f U1 where
+  gplate1' _ = pure
+  {-# INLINE gplate1' #-}
+
+-- | ignored
+instance GPlated1 f V1 where
+  gplate1' _ = pure
+  {-# INLINE gplate1' #-}
+
+-- | match
+instance OVERLAPPING_PRAGMA GPlated1 f (Rec1 f) where
+  gplate1' f (Rec1 x) = Rec1 <$> f x
+  {-# INLINE gplate1' #-}
+
+-- | ignored
+instance GPlated1 f (Rec1 g) where
+  gplate1' _ = pure
+  {-# INLINE gplate1' #-}
+
+-- | recursive match under outer 'Traversable' instance
+instance (Traversable t, GPlated1 f g) => GPlated1 f (t :.: g) where
+  gplate1' f (Comp1 x) = Comp1 <$> traverse (gplate1' f) x
+  {-# INLINE gplate1' #-}
+
+#if MIN_VERSION_base(4,9,0)
+-- | ignored
+instance GPlated1 f (URec a) where
+  gplate1' _ = pure
+  {-# INLINE gplate1' #-}
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/src/Control/Lens/Setter.hs 
new/lens-4.17.1/src/Control/Lens/Setter.hs
--- old/lens-4.17/src/Control/Lens/Setter.hs    2018-07-03 19:04:18.000000000 
+0200
+++ new/lens-4.17.1/src/Control/Lens/Setter.hs  2001-09-09 03:46:40.000000000 
+0200
@@ -62,6 +62,8 @@
   , scribe
   , passing, ipassing
   , censoring, icensoring
+  -- * Reader Combinators
+  , locally, ilocally
   -- * Simplified State Setting
   , set'
   -- * Indexed Setters
@@ -84,7 +86,8 @@
 import Control.Lens.Internal.Setter
 import Control.Lens.Type
 import Control.Monad (liftM)
-import Control.Monad.State.Class as State
+import Control.Monad.Reader.Class as Reader
+import Control.Monad.State.Class  as State
 import Control.Monad.Writer.Class as Writer
 import Data.Functor.Contravariant
 import Data.Functor.Identity
@@ -490,6 +493,11 @@
 -- >>> Map.empty & at 3 ?~ x
 -- fromList [(3,x)]
 --
+-- '?~' can be used type-changily:
+--
+-- >>> ('a', ('b', 'c')) & _2.both ?~ 'x'
+-- ('a',(Just 'x',Just 'x'))
+--
 -- @
 -- ('?~') :: 'Setter' s t a ('Maybe' b)    -> b -> s -> t
 -- ('?~') :: 'Iso' s t a ('Maybe' b)       -> b -> s -> t
@@ -1076,14 +1084,14 @@
 
 -----------------------------------------------------------------------------
 -- Writer Operations
-----------------------------------------------------------------------------
+-----------------------------------------------------------------------------
 
 -- | Write to a fragment of a larger 'Writer' format.
 scribe :: (MonadWriter t m, Monoid s) => ASetter s t a b -> b -> m ()
 scribe l b = tell (set l b mempty)
 {-# INLINE scribe #-}
 
--- | This is a generalization of 'pass' that alows you to modify just a
+-- | This is a generalization of 'pass' that allows you to modify just a
 -- portion of the resulting 'MonadWriter'.
 passing :: MonadWriter w m => Setter w w u v -> m (a, u -> v) -> m a
 passing l m = pass $ do
@@ -1091,7 +1099,7 @@
   return (a, over l uv)
 {-# INLINE passing #-}
 
--- | This is a generalization of 'pass' that alows you to modify just a
+-- | This is a generalization of 'pass' that allows you to modify just a
 -- portion of the resulting 'MonadWriter' with access to the index of an
 -- 'IndexedSetter'.
 ipassing :: MonadWriter w m => IndexedSetter i w w u v -> m (a, i -> u -> v) 
-> m a
@@ -1100,13 +1108,13 @@
   return (a, iover l uv)
 {-# INLINE ipassing #-}
 
--- | This is a generalization of 'censor' that alows you to 'censor' just a
+-- | This is a generalization of 'censor' that allows you to 'censor' just a
 -- portion of the resulting 'MonadWriter'.
 censoring :: MonadWriter w m => Setter w w u v -> (u -> v) -> m a -> m a
 censoring l uv = censor (over l uv)
 {-# INLINE censoring #-}
 
--- | This is a generalization of 'censor' that alows you to 'censor' just a
+-- | This is a generalization of 'censor' that allows you to 'censor' just a
 -- portion of the resulting 'MonadWriter', with access to the index of an
 -- 'IndexedSetter'.
 icensoring :: MonadWriter w m => IndexedSetter i w w u v -> (i -> u -> v) -> m 
a -> m a
@@ -1114,8 +1122,54 @@
 {-# INLINE icensoring #-}
 
 -----------------------------------------------------------------------------
+-- Reader Operations
+-----------------------------------------------------------------------------
+
+-- | Modify the value of the 'Reader' environment associated with the target 
of a
+-- 'Setter', 'Lens', or 'Traversal'.
+--
+-- @
+-- 'locally' l 'id' a ≡ a
+-- 'locally' l f '.' locally l g ≡ 'locally' l (f '.' g)
+-- @
+--
+-- >>> (1,1) & locally _1 (+1) (uncurry (+))
+-- 3
+--
+-- >>> "," & locally ($) ("Hello" <>) (<> " world!")
+-- "Hello, world!"
+--
+-- @
+-- locally :: MonadReader s m => 'Iso' s s a b       -> (a -> b) -> m r -> m r
+-- locally :: MonadReader s m => 'Lens' s s a b      -> (a -> b) -> m r -> m r
+-- locally :: MonadReader s m => 'Traversal' s s a b -> (a -> b) -> m r -> m r
+-- locally :: MonadReader s m => 'Setter' s s a b    -> (a -> b) -> m r -> m r
+-- @
+locally :: MonadReader s m => ASetter s s a b -> (a -> b) -> m r -> m r
+locally l f = Reader.local (over l f)
+{-# INLINE locally #-}
+
+-- | This is a generalization of 'locally' that allows one to make indexed
+-- 'local' changes to a 'Reader' environment associated with the target of a
+-- 'Setter', 'Lens', or 'Traversal'.
+--
+-- @
+-- 'locally' l f ≡ 'ilocally' l f . const
+-- 'ilocally' l f ≡ 'locally' l f . 'Indexed'
+-- @
+--
+-- @
+-- ilocally :: MonadReader s m => 'IndexedLens' s s a b      -> (i -> a -> b) 
-> m r -> m r
+-- ilocally :: MonadReader s m => 'IndexedTraversal' s s a b -> (i -> a -> b) 
-> m r -> m r
+-- ilocally :: MonadReader s m => 'IndexedSetter' s s a b    -> (i -> a -> b) 
-> m r -> m r
+-- @
+ilocally :: MonadReader s m => AnIndexedSetter i s s a b -> (i -> a -> b) -> m 
r -> m r
+ilocally l f = Reader.local (iover l f)
+{-# INLINE ilocally #-}
+
+-----------------------------------------------------------------------------
 -- Indexed Setters
-----------------------------------------------------------------------------
+-----------------------------------------------------------------------------
 
 
 -- | Map with index. This is an alias for 'imapOf'.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/src/Control/Lens/Traversal.hs 
new/lens-4.17.1/src/Control/Lens/Traversal.hs
--- old/lens-4.17/src/Control/Lens/Traversal.hs 2018-07-03 19:04:18.000000000 
+0200
+++ new/lens-4.17.1/src/Control/Lens/Traversal.hs       2001-09-09 
03:46:40.000000000 +0200
@@ -3,7 +3,6 @@
 {-# LANGUAGE Rank2Types #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE FunctionalDependencies #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE Trustworthy #-}
@@ -75,7 +74,7 @@
   -- * Parts and Holes
   , partsOf, partsOf'
   , unsafePartsOf, unsafePartsOf'
-  , holesOf
+  , holesOf, holes1Of
   , singular, unsafeSingular
 
   -- * Common Traversals
@@ -139,6 +138,7 @@
 import Control.Lens.Internal.Bazaar
 import Control.Lens.Internal.Context
 import Control.Lens.Internal.Indexed
+import Control.Lens.Internal.Fold
 import Control.Lens.Lens
 import Control.Lens.Setter (ASetter, AnIndexedSetter, isets, sets)
 import Control.Lens.Type
@@ -149,21 +149,24 @@
 #if __GLASGOW_HASKELL__ < 710
 import Data.Foldable (Foldable)
 #endif
+import Data.Functor.Apply
 import Data.Functor.Compose
 import Data.Functor.Day.Curried
 import Data.Functor.Yoneda
 import Data.Int
 import Data.IntMap as IntMap
+import Data.List.NonEmpty (NonEmpty (..))
 import qualified Data.Map as Map
 import Data.Map (Map)
 import Data.Sequence (Seq, mapWithIndex)
 import Data.Vector as Vector (Vector, imap)
-import Data.Monoid
+import Data.Monoid (Monoid (..), Any (..), Endo (..))
 import Data.Profunctor
 import Data.Profunctor.Rep
 import Data.Profunctor.Sieve
 import Data.Profunctor.Unsafe
 import Data.Reflection
+import Data.Semigroup (Semigroup (..))
 import Data.Semigroup.Traversable
 import Data.Semigroup.Bitraversable
 import Data.Traversable
@@ -172,7 +175,8 @@
 import Prelude hiding ((.),id)
 
 -- $setup
--- >>> :set -XNoOverloadedStrings
+-- >>> :set -XNoOverloadedStrings -XFlexibleContexts
+-- >>> import Data.Char (toUpper)
 -- >>> import Control.Lens
 -- >>> import Control.DeepSeq (NFData (..), force)
 -- >>> import Control.Exception (evaluate,try,ErrorCall(..))
@@ -181,6 +185,7 @@
 -- >>> import Data.Void
 -- >>> import Data.List (sort)
 -- >>> import System.Timeout (timeout)
+-- >>> import qualified Data.List.NonEmpty as NonEmpty
 -- >>> let timingOut :: NFData a => a -> IO a; timingOut = fmap (fromMaybe 
(error "timeout")) . timeout (5*10^6) . evaluate . force
 
 ------------------------------------------------------------------------------
@@ -739,6 +744,36 @@
     , cosieve (id :: p a a) x)
 {-# INLINABLE holeInOne #-}
 
+-- | The non-empty version of 'holesOf'.
+-- This extract a non-empty list of immediate children accroding to a given
+-- 'Traversal1' as editable contexts.
+--
+-- >>> let head1 f s = runPretext (NonEmpty.head $ holes1Of traversed1 s) f
+-- >>> ('a' :| "bc") ^. head1
+-- 'a'
+--
+-- >>> ('a' :| "bc") & head1 %~ toUpper
+-- 'A' :| "bc"
+--
+-- @
+-- 'holes1Of' :: 'Iso'' s a                 -> s -> 'NonEmpty' ('Pretext'' 
(->) a s)
+-- 'holes1Of' :: 'Lens'' s a                -> s -> 'NonEmpty' ('Pretext'' 
(->) a s)
+-- 'holes1Of' :: 'Traversal1'' s a          -> s -> 'NonEmpty' ('Pretext'' 
(->) a s)
+-- 'holes1Of' :: 'IndexedLens'' i s a       -> s -> 'NonEmpty' ('Pretext'' 
('Indexed' i) a s)
+-- 'holes1Of' :: 'IndexedTraversal1'' i s a -> s -> 'NonEmpty' ('Pretext'' 
('Indexed' i) a s)
+-- @
+holes1Of :: Conjoined p
+         => Over p (Bazaar1 p a a) s t a a -> s -> NonEmpty (Pretext p a a t)
+holes1Of f xs = flip getNonEmptyDList [] . fst $
+  runHoles (runBazaar1 (f sell xs) (cotabulate holeInOne1)) id
+{-# INLINE holes1Of #-}
+
+holeInOne1 :: forall p a t. (Corepresentable p, Category p)
+          => Corep p a -> Holes t (NonEmptyDList (Pretext p a a t)) a
+holeInOne1 x = Holes $ \xt ->
+    ( NonEmptyDList (fmap xt (cosieve sell x) :|)
+    , cosieve (id :: p a a) x)
+
 -- We are very careful to share as much structure as possible among
 -- the results (in the common case where the traversal allows for such).
 -- Note in particular the recursive knot in the implementation of <*>
@@ -755,6 +790,13 @@
       (qf, qv) = runHoles xs (xt . f)
     in (qf, f qv)
 
+instance Semigroup m => Apply (Holes t m) where
+  fs <.> xs = Holes $ \xt ->
+    let
+     (pf, pv) = runHoles fs (xt . ($ qv))
+     (qf, qv) = runHoles xs (xt . pv)
+    in (pf <> qf, pv qv)
+
 instance Monoid m => Applicative (Holes t m) where
   pure x = Holes $ \_ -> (mempty, x)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/src/Control/Lens/Tuple.hs 
new/lens-4.17.1/src/Control/Lens/Tuple.hs
--- old/lens-4.17/src/Control/Lens/Tuple.hs     2018-07-03 19:04:18.000000000 
+0200
+++ new/lens-4.17.1/src/Control/Lens/Tuple.hs   2001-09-09 03:46:40.000000000 
+0200
@@ -9,7 +9,6 @@
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE UndecidableInstances #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE FunctionalDependencies #-}
 #if __GLASGOW_HASKELL__ >= 706
 {-# LANGUAGE PolyKinds #-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/src/Control/Lens/Type.hs 
new/lens-4.17.1/src/Control/Lens/Type.hs
--- old/lens-4.17/src/Control/Lens/Type.hs      2018-07-03 19:04:18.000000000 
+0200
+++ new/lens-4.17.1/src/Control/Lens/Type.hs    2001-09-09 03:46:40.000000000 
+0200
@@ -375,7 +375,7 @@
 -- around with 'Control.Lens.Review.re' to obtain a 'Getter' in the
 -- opposite direction.
 --
--- There are two laws that a 'Prism' should satisfy:
+-- There are three laws that a 'Prism' should satisfy:
 --
 -- First, if I 'Control.Lens.Review.re' or 'Control.Lens.Review.review' a 
value with a 'Prism' and then 'Control.Lens.Fold.preview' or use 
('Control.Lens.Fold.^?'), I will get it back:
 --
@@ -385,9 +385,17 @@
 --
 -- Second, if you can extract a value @a@ using a 'Prism' @l@ from a value 
@s@, then the value @s@ is completely described by @l@ and @a@:
 --
--- If @'Control.Lens.Fold.preview' l s ≡ 'Just' a@ then 
@'Control.Lens.Review.review' l a ≡ s@
+-- @
+-- 'Control.Lens.Fold.preview' l s ≡ 'Just' a ⟹ 'Control.Lens.Review.review' l 
a ≡ s
+-- @
+--
+-- Third, if you get non-match @t@, you can convert it result back to @s@:
+--
+-- @
+-- 'Control.Lens.Combinators.matching' l s ≡ 'Left' t ⟹ 
'Control.Lens.Combinators.matching' l t ≡ 'Left' s
+-- @
 --
--- These two laws imply that the 'Traversal' laws hold for every 'Prism' and 
that we 'Data.Traversable.traverse' at most 1 element:
+-- The first two laws imply that the 'Traversal' laws hold for every 'Prism' 
and that we 'Data.Traversable.traverse' at most 1 element:
 --
 -- @
 -- 'Control.Lens.Fold.lengthOf' l x '<=' 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/src/Control/Lens/Wrapped.hs 
new/lens-4.17.1/src/Control/Lens/Wrapped.hs
--- old/lens-4.17/src/Control/Lens/Wrapped.hs   2018-07-03 19:04:18.000000000 
+0200
+++ new/lens-4.17.1/src/Control/Lens/Wrapped.hs 2001-09-09 03:46:40.000000000 
+0200
@@ -2,11 +2,9 @@
 {-# LANGUAGE Rank2Types #-}
 {-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE TypeOperators #-}
-{-# LANGUAGE KindSignatures #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE DefaultSignatures #-}
 {-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE TypeSynonymInstances #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE UndecidableInstances #-}
 
@@ -337,6 +335,14 @@
   {-# INLINE _Wrapped' #-}
 #endif
 
+#if MIN_VERSION_base(4,12,0)
+instance (t ~ Monoid.Ap g b) => Rewrapped (Monoid.Ap f a) t
+instance Wrapped (Monoid.Ap f a) where
+  type Unwrapped (Monoid.Ap f a) = f a
+  _Wrapped' = iso Monoid.getAp Monoid.Ap
+  {-# INLINE _Wrapped' #-}
+#endif
+
 instance t ~ ArrowMonad m' a' => Rewrapped (ArrowMonad m a) t
 instance Wrapped (ArrowMonad m a) where
   type Unwrapped (ArrowMonad m a) = m () a
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/src/Control/Lens/Zoom.hs 
new/lens-4.17.1/src/Control/Lens/Zoom.hs
--- old/lens-4.17/src/Control/Lens/Zoom.hs      2018-07-03 19:04:18.000000000 
+0200
+++ new/lens-4.17.1/src/Control/Lens/Zoom.hs    2001-09-09 03:46:40.000000000 
+0200
@@ -2,7 +2,6 @@
 {-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE UndecidableInstances #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE FunctionalDependencies #-}
 {-# OPTIONS_GHC -fno-warn-warnings-deprecations #-}
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/src/Data/Text/Lens.hs 
new/lens-4.17.1/src/Data/Text/Lens.hs
--- old/lens-4.17/src/Data/Text/Lens.hs 2018-07-03 19:04:18.000000000 +0200
+++ new/lens-4.17.1/src/Data/Text/Lens.hs       2001-09-09 03:46:40.000000000 
+0200
@@ -1,7 +1,6 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE TypeSynonymInstances #-}
 
 #if __GLASGOW_HASKELL__ >= 710
 {-# LANGUAGE ViewPatterns #-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/src/Numeric/Lens.hs 
new/lens-4.17.1/src/Numeric/Lens.hs
--- old/lens-4.17/src/Numeric/Lens.hs   2018-07-03 19:04:18.000000000 +0200
+++ new/lens-4.17.1/src/Numeric/Lens.hs 2001-09-09 03:46:40.000000000 +0200
@@ -119,7 +119,7 @@
 -- | A simpler variant of 'Numeric.readSigned' that supports any base, only
 -- recognizes an initial dash and doesn't know about parentheses
 readSigned' :: Real a => ReadS a -> ReadS a
-readSigned' f ('-':xs) = f xs & mapped . _1 %~ negate
+readSigned' f ('-':xs) = f xs <&> _1 %~ negate
 readSigned' f xs       = f xs
 
 -- | @'binary' = 'base' 2@
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lens-4.17/tests/properties.hs 
new/lens-4.17.1/tests/properties.hs
--- old/lens-4.17/tests/properties.hs   2018-07-03 19:04:18.000000000 +0200
+++ new/lens-4.17.1/tests/properties.hs 2001-09-09 03:46:40.000000000 +0200
@@ -42,6 +42,8 @@
 import Numeric.Lens
 import Control.Lens.Properties (isIso, isLens, isPrism, isSetter, isTraversal)
 
+#include "lens-common.h"
+
 -- an illegal lens
 bad :: Lens' (Int,Int) Int
 bad f (a,b) = (,) b <$> f a
@@ -123,12 +125,12 @@
 samplePolyEquality :: Equality Monad Identity Monad Identity
 samplePolyEquality f = f
 
-lessSimplePoly :: forall (s :: k1) (t :: k2) (a :: k1) (b :: k2) .
+lessSimplePoly :: forall KVS(k1 k2) (s :: k1) (t :: k2) (a :: k1) (b :: k2) .
                   Equality a b a b
 lessSimplePoly f = f
 
 equalityAnEqualityPoly ::
-       forall (s :: k1) (t :: k2) (a :: k1) (b :: k2) .
+       forall KVS(k1 k2) (s :: k1) (t :: k2) (a :: k1) (b :: k2) .
        Equality s t a b -> AnEquality s t a b
 equalityAnEqualityPoly f = f
 #else


Reply via email to