Hello community,

here is the log from the commit of package ghc-contravariant for 
openSUSE:Factory checked in at 2018-07-24 17:16:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-contravariant (Old)
 and      /work/SRC/openSUSE:Factory/.ghc-contravariant.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ghc-contravariant"

Tue Jul 24 17:16:25 2018 rev:8 rq:623747 version:1.5

Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-contravariant/ghc-contravariant.changes      
2018-05-30 12:25:16.538388053 +0200
+++ /work/SRC/openSUSE:Factory/.ghc-contravariant.new/ghc-contravariant.changes 
2018-07-24 17:16:33.186850190 +0200
@@ -1,0 +2,15 @@
+Wed Jul 18 14:26:19 UTC 2018 - psim...@suse.com
+
+- Cosmetic: replace tabs with blanks, strip trailing white space,
+  and update copyright headers with spec-cleaner.
+
+-------------------------------------------------------------------
+Fri Jul 13 14:32:00 UTC 2018 - psim...@suse.com
+
+- Update contravariant to version 1.5.
+  1.5 [2018.07.01]
+  ----------------
+  * Support building with GHC 8.6, where `Data.Functor.Contravariant` has been
+    moved into `base`.
+
+-------------------------------------------------------------------
@@ -49 +63,0 @@
-

Old:
----
  contravariant-1.4.1.tar.gz
  contravariant.cabal

New:
----
  contravariant-1.5.tar.gz

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

Other differences:
------------------
++++++ ghc-contravariant.spec ++++++
--- /var/tmp/diff_new_pack.OVbZ4w/_old  2018-07-24 17:16:34.042851296 +0200
+++ /var/tmp/diff_new_pack.OVbZ4w/_new  2018-07-24 17:16:34.042851296 +0200
@@ -18,18 +18,16 @@
 
 %global pkg_name contravariant
 Name:           ghc-%{pkg_name}
-Version:        1.4.1
+Version:        1.5
 Release:        0
 Summary:        Contravariant functors
 License:        BSD-3-Clause
 Group:          Development/Libraries/Haskell
 URL:            https://hackage.haskell.org/package/%{pkg_name}
 Source0:        
https://hackage.haskell.org/package/%{pkg_name}-%{version}/%{pkg_name}-%{version}.tar.gz
-Source1:        
https://hackage.haskell.org/package/%{pkg_name}-%{version}/revision/1.cabal#/%{pkg_name}.cabal
 BuildRequires:  ghc-Cabal-devel
 BuildRequires:  ghc-StateVar-devel
 BuildRequires:  ghc-rpm-macros
-BuildRequires:  ghc-transformers-compat-devel
 BuildRequires:  ghc-transformers-devel
 
 %description
@@ -48,7 +46,6 @@
 
 %prep
 %setup -q -n %{pkg_name}-%{version}
-cp -p %{SOURCE1} %{pkg_name}.cabal
 
 %build
 %ghc_lib_build

++++++ contravariant-1.4.1.tar.gz -> contravariant-1.5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/contravariant-1.4.1/.travis.yml 
new/contravariant-1.5/.travis.yml
--- old/contravariant-1.4.1/.travis.yml 2018-01-18 20:29:34.000000000 +0100
+++ new/contravariant-1.5/.travis.yml   2018-07-02 01:07:28.000000000 +0200
@@ -1,6 +1,6 @@
 # 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'
+#   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'
 #
 # For more information, see https://github.com/hvr/multi-ghc-travis
 #
@@ -42,42 +42,45 @@
 
 matrix:
   include:
-    - compiler: "ghc-7.0.4"
+    - 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.0,ghc-7.0.4], 
sources: [hvr-ghc]}}
-    - compiler: "ghc-7.2.2"
+      addons: {apt: {packages: [*apt_packages,cabal-install-2.2,ghc-8.4.3], 
sources: [hvr-ghc]}}
+    - compiler: "ghc-8.2.2"
     # env: TEST=--disable-tests BENCH=--disable-benchmarks
-      addons: {apt: {packages: [*apt_packages,cabal-install-2.0,ghc-7.2.2], 
sources: [hvr-ghc]}}
-    - compiler: "ghc-7.4.2"
+      addons: {apt: {packages: [*apt_packages,cabal-install-2.2,ghc-8.2.2], 
sources: [hvr-ghc]}}
+    - compiler: "ghc-8.0.2"
     # env: TEST=--disable-tests BENCH=--disable-benchmarks
-      addons: {apt: {packages: [*apt_packages,cabal-install-2.0,ghc-7.4.2], 
sources: [hvr-ghc]}}
-    - compiler: "ghc-7.6.3"
+      addons: {apt: {packages: [*apt_packages,cabal-install-2.2,ghc-8.0.2], 
sources: [hvr-ghc]}}
+    - compiler: "ghc-7.10.3"
     # env: TEST=--disable-tests BENCH=--disable-benchmarks
-      addons: {apt: {packages: [*apt_packages,cabal-install-2.0,ghc-7.6.3], 
sources: [hvr-ghc]}}
+      addons: {apt: {packages: [*apt_packages,cabal-install-2.2,ghc-7.10.3], 
sources: [hvr-ghc]}}
     - compiler: "ghc-7.8.4"
     # env: TEST=--disable-tests BENCH=--disable-benchmarks
-      addons: {apt: {packages: [*apt_packages,cabal-install-2.0,ghc-7.8.4], 
sources: [hvr-ghc]}}
-    - compiler: "ghc-7.10.3"
+      addons: {apt: {packages: [*apt_packages,cabal-install-2.2,ghc-7.8.4], 
sources: [hvr-ghc]}}
+    - compiler: "ghc-7.6.3"
     # env: TEST=--disable-tests BENCH=--disable-benchmarks
-      addons: {apt: {packages: [*apt_packages,cabal-install-2.0,ghc-7.10.3], 
sources: [hvr-ghc]}}
-    - compiler: "ghc-8.0.2"
+      addons: {apt: {packages: [*apt_packages,cabal-install-2.2,ghc-7.6.3], 
sources: [hvr-ghc]}}
+    - compiler: "ghc-7.4.2"
     # env: TEST=--disable-tests BENCH=--disable-benchmarks
-      addons: {apt: {packages: [*apt_packages,cabal-install-2.0,ghc-8.0.2], 
sources: [hvr-ghc]}}
-    - compiler: "ghc-8.2.2"
+      addons: {apt: {packages: [*apt_packages,cabal-install-2.2,ghc-7.4.2], 
sources: [hvr-ghc]}}
+    - compiler: "ghc-7.2.2"
     # env: TEST=--disable-tests BENCH=--disable-benchmarks
-      addons: {apt: {packages: [*apt_packages,cabal-install-2.0,ghc-8.2.2], 
sources: [hvr-ghc]}}
-    - compiler: "ghc-8.4.1"
-      env: GHCHEAD=true
-      addons: {apt: {packages: [*apt_packages,cabal-install-head,ghc-8.4.1], 
sources: [hvr-ghc]}}
+      addons: {apt: {packages: [*apt_packages,cabal-install-2.2,ghc-7.2.2], 
sources: [hvr-ghc]}}
+    - compiler: "ghc-7.0.4"
+    # env: TEST=--disable-tests BENCH=--disable-benchmarks
+      addons: {apt: {packages: [*apt_packages,cabal-install-2.2,ghc-7.0.4], 
sources: [hvr-ghc]}}
     - compiler: "ghc-head"
       env: GHCHEAD=true
       addons: {apt: {packages: [*apt_packages,cabal-install-head,ghc-head], 
sources: [hvr-ghc]}}
 
   allow_failures:
+    - compiler: "ghc-head"
     - compiler: "ghc-7.0.4"
     - compiler: "ghc-7.2.2"
-    - compiler: "ghc-8.4.1"
-    - compiler: "ghc-head"
+    - compiler: "ghc-8.6.1"
 
 before_install:
   - HC=${CC}
@@ -95,7 +98,8 @@
   - BENCH=${BENCH---enable-benchmarks}
   - TEST=${TEST---enable-tests}
   - HADDOCK=${HADDOCK-true}
-  - INSTALLED=${INSTALLED-true}
+  - UNCONSTRAINED=${UNCONSTRAINED-true}
+  - NOINSTALLEDCONSTRAINTS=${NOINSTALLEDCONSTRAINTS-false}
   - GHCHEAD=${GHCHEAD-false}
   - travis_retry cabal update -v
   - "sed -i.bak 's/^jobs:/-- jobs:/' ${HOME}/.cabal/config"
@@ -103,7 +107,8 @@
   # 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
+      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
 
       echo 'repository head.hackage'                                           
             >> ${HOME}/.cabal/config
       echo '   url: http://head.hackage.haskell.org/'                          
             >> ${HOME}/.cabal/config
@@ -113,17 +118,22 @@
       echo '              
8f79fd2389ab2967354407ec852cbe73f2e8635793ac446d09461ffb99527f6e' >> 
${HOME}/.cabal/config
       echo '   key-threshold: 3'                                               
             >> ${HOME}/.cabal.config
 
+      grep -Ev -- '^\s*--' ${HOME}/.cabal/config | grep -Ev '^\s*$'
+
       cabal new-update head.hackage -v
     fi
   - grep -Ev -- '^\s*--' ${HOME}/.cabal/config | grep -Ev '^\s*$'
   - "printf 'packages: \".\"\\n' > cabal.project"
-  - cat 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"
+  - 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-build -w ${HC} ${TEST} ${BENCH} --project-file="cabal.project" 
--dep -j2 all
-  - rm -rf "."/.ghc.environment.* "."/dist
+  - 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;
@@ -135,8 +145,10 @@
   - cd ${DISTDIR} || false
   - find . -maxdepth 1 -name '*.tar.gz' -exec tar -xvf '{}' \;
   - "printf 'packages: contravariant-*/*.cabal\\n' > cabal.project"
-  - cat 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"
+  - cat cabal.project || true
+  - cat cabal.project.local || true
 
   # build & run tests, build benchmarks
   - cabal new-build -w ${HC} ${TEST} ${BENCH} all
@@ -151,5 +163,5 @@
   # hlint
   - (cd contravariant-* && hlint src --cpp-define=HLINT)
 
-# REGENDATA 
["-o",".travis.yml","--irc-channel=irc.freenode.org#haskell-lens","--no-no-tests-no-bench","--no-installed","cabal.project"]
+# REGENDATA 
["-o",".travis.yml","--ghc-head","--irc-channel=irc.freenode.org#haskell-lens","--no-no-tests-no-bench","--no-unconstrained","cabal.project"]
 # EOF
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/contravariant-1.4.1/CHANGELOG.markdown 
new/contravariant-1.5/CHANGELOG.markdown
--- old/contravariant-1.4.1/CHANGELOG.markdown  2018-01-18 20:29:34.000000000 
+0100
+++ new/contravariant-1.5/CHANGELOG.markdown    2018-07-02 01:07:28.000000000 
+0200
@@ -1,3 +1,8 @@
+1.5 [2018.07.01]
+----------------
+* Support building with GHC 8.6, where `Data.Functor.Contravariant` has been
+  moved into `base`.
+
 1.4.1 [2018.01.18]
 ------------------
 * Add `Semigroup` and `Monoid` instances for `Predicate`.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/contravariant-1.4.1/contravariant.cabal 
new/contravariant-1.5/contravariant.cabal
--- old/contravariant-1.4.1/contravariant.cabal 2018-01-18 20:29:34.000000000 
+0100
+++ new/contravariant-1.5/contravariant.cabal   2018-07-02 01:07:28.000000000 
+0200
@@ -1,6 +1,6 @@
 name:          contravariant
 category:      Control, Data
-version:       1.4.1
+version:       1.5
 license:       BSD3
 cabal-version: >= 1.6
 license-file:  LICENSE
@@ -21,7 +21,8 @@
              , GHC == 7.10.3
              , GHC == 8.0.2
              , GHC == 8.2.2
-             , GHC == 8.4.1
+             , GHC == 8.4.3
+             , GHC == 8.6.1
 extra-source-files:
   .travis.yml
   CHANGELOG.markdown
@@ -65,8 +66,10 @@
   hs-source-dirs: src
   build-depends:
     base                              < 5,
-    transformers        >= 0.2 &&     < 0.6,
-    transformers-compat >= 0.3 &&     < 1
+    transformers        >= 0.2 &&     < 0.6
+
+  if !impl(ghc > 7.10)
+    build-depends: transformers-compat >= 0.3 && < 1
 
   if !impl(ghc >= 7.9)
     build-depends: void >= 0.6 &&     < 1
@@ -78,7 +81,7 @@
     build-depends: semigroups >= 0.15.2 && < 1
 
   if flag(StateVar)
-    build-depends: StateVar >= 1.1 && < 1.2
+    build-depends: StateVar >= 1.1.1 && < 1.2
 
   if impl(ghc >= 7.2 && < 7.6)
     build-depends: ghc-prim
@@ -87,10 +90,13 @@
     cpp-options: -DSAFE
 
   exposed-modules:
-    Data.Functor.Contravariant
     Data.Functor.Contravariant.Compose
     Data.Functor.Contravariant.Divisible
 
+  if impl(ghc < 8.5)
+    hs-source-dirs: old-src
+    exposed-modules: Data.Functor.Contravariant
+
   if impl(ghc >= 7.4)
     exposed-modules: Data.Functor.Contravariant.Generic
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/contravariant-1.4.1/old-src/Data/Functor/Contravariant.hs 
new/contravariant-1.5/old-src/Data/Functor/Contravariant.hs
--- old/contravariant-1.4.1/old-src/Data/Functor/Contravariant.hs       
1970-01-01 01:00:00.000000000 +0100
+++ new/contravariant-1.5/old-src/Data/Functor/Contravariant.hs 2018-07-02 
01:07:28.000000000 +0200
@@ -0,0 +1,458 @@
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE TypeOperators #-}
+
+#ifdef __GLASGOW_HASKELL__
+#define LANGUAGE_DeriveDataTypeable
+{-# LANGUAGE DeriveDataTypeable #-}
+#endif
+
+#ifndef MIN_VERSION_tagged
+#define MIN_VERSION_tagged(x,y,z) 1
+#endif
+
+#ifndef MIN_VERSION_base
+#define MIN_VERSION_base(x,y,z) 1
+#endif
+
+#if __GLASGOW_HASKELL__ >= 704
+#if MIN_VERSION_transformers(0,3,0) && MIN_VERSION_tagged(0,6,1)
+{-# LANGUAGE Safe #-}
+#else
+{-# LANGUAGE Trustworthy #-}
+#endif
+#endif
+
+{-# OPTIONS_GHC -fno-warn-deprecations #-}
+
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Data.Functor.Contravariant
+-- Copyright   :  (C) 2007-2015 Edward Kmett
+-- License     :  BSD-style (see the file LICENSE)
+--
+-- Maintainer  :  Edward Kmett <ekm...@gmail.com>
+-- Stability   :  provisional
+-- Portability :  portable
+--
+-- 'Contravariant' functors, sometimes referred to colloquially as @Cofunctor@,
+-- even though the dual of a 'Functor' is just a 'Functor'. As with 'Functor'
+-- the definition of 'Contravariant' for a given ADT is unambiguous.
+----------------------------------------------------------------------------
+
+module Data.Functor.Contravariant (
+  -- * Contravariant Functors
+    Contravariant(..)
+  , phantom
+
+  -- * Operators
+  , (>$<), (>$$<), ($<)
+
+  -- * Predicates
+  , Predicate(..)
+
+  -- * Comparisons
+  , Comparison(..)
+  , defaultComparison
+
+  -- * Equivalence Relations
+  , Equivalence(..)
+  , defaultEquivalence
+  , comparisonEquivalence
+
+  -- * Dual arrows
+  , Op(..)
+  ) where
+
+import Control.Applicative
+import Control.Applicative.Backwards
+
+import Control.Category
+
+import Control.Monad.Trans.Error
+import Control.Monad.Trans.Except
+import Control.Monad.Trans.Identity
+import Control.Monad.Trans.List
+import Control.Monad.Trans.Maybe
+import qualified Control.Monad.Trans.RWS.Lazy as Lazy
+import qualified Control.Monad.Trans.RWS.Strict as Strict
+import Control.Monad.Trans.Reader
+import qualified Control.Monad.Trans.State.Lazy as Lazy
+import qualified Control.Monad.Trans.State.Strict as Strict
+import qualified Control.Monad.Trans.Writer.Lazy as Lazy
+import qualified Control.Monad.Trans.Writer.Strict as Strict
+
+import Data.Function (on)
+
+import Data.Functor.Product
+import Data.Functor.Sum
+import Data.Functor.Constant
+import Data.Functor.Compose
+import Data.Functor.Reverse
+
+#if MIN_VERSION_base(4,8,0)
+import Data.Monoid (Alt(..))
+#else
+import Data.Monoid (Monoid(..))
+#endif
+
+#if defined(MIN_VERSION_semigroups) || __GLASGOW_HASKELL__ >= 711
+import Data.Semigroup (Semigroup(..))
+#endif
+
+#ifdef LANGUAGE_DeriveDataTypeable
+import Data.Typeable
+#endif
+
+#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ < 707 && 
defined(VERSION_tagged)
+import Data.Proxy
+#endif
+
+#ifdef MIN_VERSION_StateVar
+import Data.StateVar
+#endif
+
+#if __GLASGOW_HASKELL__ >= 702
+#define GHC_GENERICS
+import GHC.Generics
+#endif
+
+import Prelude hiding ((.),id)
+
+-- | The class of contravariant functors.
+--
+-- Whereas in Haskell, one can think of a 'Functor' as containing or producing
+-- values, a contravariant functor is a functor that can be thought of as
+-- /consuming/ values.
+--
+-- As an example, consider the type of predicate functions  @a -> Bool@. One
+-- such predicate might be @negative x = x < 0@, which
+-- classifies integers as to whether they are negative. However, given this
+-- predicate, we can re-use it in other situations, providing we have a way to
+-- map values /to/ integers. For instance, we can use the @negative@ predicate
+-- on a person's bank balance to work out if they are currently overdrawn:
+--
+-- @
+-- newtype Predicate a = Predicate { getPredicate :: a -> Bool }
+--
+-- instance Contravariant Predicate where
+--   contramap f (Predicate p) = Predicate (p . f)
+--                                          |   `- First, map the input...
+--                                          `----- then apply the predicate.
+--
+-- overdrawn :: Predicate Person
+-- overdrawn = contramap personBankBalance negative
+-- @
+--
+-- Any instance should be subject to the following laws:
+--
+-- > contramap id = id
+-- > contramap f . contramap g = contramap (g . f)
+--
+-- Note, that the second law follows from the free theorem of the type of
+-- 'contramap' and the first law, so you need only check that the former
+-- condition holds.
+
+class Contravariant f where
+  contramap :: (a -> b) -> f b -> f a
+
+  -- | Replace all locations in the output with the same value.
+  -- The default definition is @'contramap' . 'const'@, but this may be
+  -- overridden with a more efficient version.
+  (>$) :: b -> f b -> f a
+  (>$) = contramap . const
+
+-- | If 'f' is both 'Functor' and 'Contravariant' then by the time you factor 
in the laws
+-- of each of those classes, it can't actually use its argument in any 
meaningful capacity.
+--
+-- This method is surprisingly useful. Where both instances exist and are 
lawful we have
+-- the following laws:
+--
+-- @
+-- 'fmap' f ≡ 'phantom'
+-- 'contramap' f ≡ 'phantom'
+-- @
+phantom :: (Functor f, Contravariant f) => f a -> f b
+phantom x = () <$ x $< ()
+
+infixl 4 >$, $<, >$<, >$$<
+
+-- | This is '>$' with its arguments flipped.
+($<) :: Contravariant f => f b -> b -> f a
+($<) = flip (>$)
+{-# INLINE ($<) #-}
+
+-- | This is an infix alias for 'contramap'.
+(>$<) :: Contravariant f => (a -> b) -> f b -> f a
+(>$<) = contramap
+{-# INLINE (>$<) #-}
+
+-- | This is an infix version of 'contramap' with the arguments flipped.
+(>$$<) :: Contravariant f => f b -> (a -> b) -> f a
+(>$$<) = flip contramap
+{-# INLINE (>$$<) #-}
+
+#if MIN_VERSION_base(4,8,0)
+instance Contravariant f => Contravariant (Alt f) where
+  contramap f = Alt . contramap f . getAlt
+#endif
+
+#ifdef GHC_GENERICS
+instance Contravariant V1 where
+  contramap _ x = x `seq` undefined
+
+instance Contravariant U1 where
+  contramap _ _ = U1
+
+instance Contravariant f => Contravariant (Rec1 f) where
+  contramap f (Rec1 fp)= Rec1 (contramap f fp)
+
+instance Contravariant f => Contravariant (M1 i c f) where
+  contramap f (M1 fp) = M1 (contramap f fp)
+
+instance Contravariant (K1 i c) where
+  contramap _ (K1 c) = K1 c
+
+instance (Contravariant f, Contravariant g) => Contravariant (f :*: g) where
+  contramap f (xs :*: ys) = contramap f xs :*: contramap f ys
+
+instance (Functor f, Contravariant g) => Contravariant (f :.: g) where
+  contramap f (Comp1 fg) = Comp1 (fmap (contramap f) fg)
+  {-# INLINE contramap #-}
+
+instance (Contravariant f, Contravariant g) => Contravariant (f :+: g) where
+  contramap f (L1 xs) = L1 (contramap f xs)
+  contramap f (R1 ys) = R1 (contramap f ys)
+#endif
+
+instance Contravariant m => Contravariant (ErrorT e m) where
+  contramap f = ErrorT . contramap (fmap f) . runErrorT
+
+instance Contravariant m => Contravariant (ExceptT e m) where
+  contramap f = ExceptT . contramap (fmap f) . runExceptT
+
+instance Contravariant f => Contravariant (IdentityT f) where
+  contramap f = IdentityT . contramap f . runIdentityT
+
+instance Contravariant m => Contravariant (ListT m) where
+  contramap f = ListT . contramap (fmap f) . runListT
+
+instance Contravariant m => Contravariant (MaybeT m) where
+  contramap f = MaybeT . contramap (fmap f) . runMaybeT
+
+instance Contravariant m => Contravariant (Lazy.RWST r w s m) where
+  contramap f m = Lazy.RWST $ \r s ->
+    contramap (\ ~(a, s', w) -> (f a, s', w)) $ Lazy.runRWST m r s
+
+instance Contravariant m => Contravariant (Strict.RWST r w s m) where
+  contramap f m = Strict.RWST $ \r s ->
+    contramap (\ (a, s', w) -> (f a, s', w)) $ Strict.runRWST m r s
+
+instance Contravariant m => Contravariant (ReaderT r m) where
+  contramap f = ReaderT . fmap (contramap f) . runReaderT
+
+instance Contravariant m => Contravariant (Lazy.StateT s m) where
+  contramap f m = Lazy.StateT $ \s ->
+    contramap (\ ~(a, s') -> (f a, s')) $ Lazy.runStateT m s
+
+instance Contravariant m => Contravariant (Strict.StateT s m) where
+  contramap f m = Strict.StateT $ \s ->
+    contramap (\ (a, s') -> (f a, s')) $ Strict.runStateT m s
+
+instance Contravariant m => Contravariant (Lazy.WriterT w m) where
+  contramap f = Lazy.mapWriterT $ contramap $ \ ~(a, w) -> (f a, w)
+
+instance Contravariant m => Contravariant (Strict.WriterT w m) where
+  contramap f = Strict.mapWriterT $ contramap $ \ (a, w) -> (f a, w)
+
+instance (Contravariant f, Contravariant g) => Contravariant (Sum f g) where
+  contramap f (InL xs) = InL (contramap f xs)
+  contramap f (InR ys) = InR (contramap f ys)
+
+instance (Contravariant f, Contravariant g) => Contravariant (Product f g) 
where
+  contramap f (Pair a b) = Pair (contramap f a) (contramap f b)
+
+instance Contravariant (Constant a) where
+  contramap _ (Constant a) = Constant a
+
+instance Contravariant (Const a) where
+  contramap _ (Const a) = Const a
+
+instance (Functor f, Contravariant g) => Contravariant (Compose f g) where
+  contramap f (Compose fga) = Compose (fmap (contramap f) fga)
+  {-# INLINE contramap #-}
+
+instance Contravariant f => Contravariant (Backwards f) where
+  contramap f = Backwards . contramap f . forwards
+  {-# INLINE contramap #-}
+
+instance Contravariant f => Contravariant (Reverse f) where
+  contramap f = Reverse . contramap f . getReverse
+  {-# INLINE contramap #-}
+
+#ifdef MIN_VERSION_StateVar
+instance Contravariant SettableStateVar where
+  contramap f (SettableStateVar k) = SettableStateVar (k . f)
+  {-# INLINE contramap #-}
+#endif
+
+#if (__GLASGOW_HASKELL__ >= 707) || defined(VERSION_tagged)
+instance Contravariant Proxy where
+  contramap _ _ = Proxy
+#endif
+
+newtype Predicate a = Predicate { getPredicate :: a -> Bool }
+#ifdef LANGUAGE_DeriveDataTypeable
+  deriving Typeable
+#endif
+
+-- | A 'Predicate' is a 'Contravariant' 'Functor', because 'contramap' can
+-- apply its function argument to the input of the predicate.
+instance Contravariant Predicate where
+  contramap f g = Predicate $ getPredicate g . f
+
+#if defined(MIN_VERSION_semigroups) || __GLASGOW_HASKELL__ >= 711
+instance Semigroup (Predicate a) where
+  Predicate p <> Predicate q = Predicate $ \a -> p a && q a
+#endif
+
+instance Monoid (Predicate a) where
+  mempty = Predicate $ const True
+#if defined(MIN_VERSION_semigroups) || __GLASGOW_HASKELL__ >= 711
+  mappend = (<>)
+#else
+  mappend (Predicate p) (Predicate q) = Predicate $ \a -> p a && q a
+#endif
+
+-- | Defines a total ordering on a type as per 'compare'.
+--
+-- This condition is not checked by the types. You must ensure that the 
supplied
+-- values are valid total orderings yourself.
+newtype Comparison a = Comparison { getComparison :: a -> a -> Ordering }
+#ifdef LANGUAGE_DeriveDataTypeable
+  deriving Typeable
+#endif
+
+-- | A 'Comparison' is a 'Contravariant' 'Functor', because 'contramap' can
+-- apply its function argument to each input of the comparison function.
+instance Contravariant Comparison where
+  contramap f g = Comparison $ on (getComparison g) f
+
+#if defined(MIN_VERSION_semigroups) || __GLASGOW_HASKELL__ >= 711
+instance Semigroup (Comparison a) where
+  Comparison p <> Comparison q = Comparison $ mappend p q
+#endif
+
+instance Monoid (Comparison a) where
+  mempty = Comparison (\_ _ -> EQ)
+  mappend (Comparison p) (Comparison q) = Comparison $ mappend p q
+
+-- | Compare using 'compare'.
+defaultComparison :: Ord a => Comparison a
+defaultComparison = Comparison compare
+
+-- | This data type represents an equivalence relation.
+--
+-- Equivalence relations are expected to satisfy three laws:
+--
+-- __Reflexivity__:
+--
+-- @
+-- 'getEquivalence' f a a = True
+-- @
+--
+-- __Symmetry__:
+--
+-- @
+-- 'getEquivalence' f a b = 'getEquivalence' f b a
+-- @
+--
+-- __Transitivity__:
+--
+-- If @'getEquivalence' f a b@ and @'getEquivalence' f b c@ are both 'True' 
then so is @'getEquivalence' f a c@
+--
+-- The types alone do not enforce these laws, so you'll have to check them 
yourself.
+newtype Equivalence a = Equivalence { getEquivalence :: a -> a -> Bool }
+#ifdef LANGUAGE_DeriveDataTypeable
+  deriving Typeable
+#endif
+
+-- | Equivalence relations are 'Contravariant', because you can
+-- apply the contramapped function to each input to the equivalence
+-- relation.
+instance Contravariant Equivalence where
+  contramap f g = Equivalence $ on (getEquivalence g) f
+
+#if defined(MIN_VERSION_semigroups) || __GLASGOW_HASKELL__ >= 711
+instance Semigroup (Equivalence a) where
+  Equivalence p <> Equivalence q = Equivalence $ \a b -> p a b && q a b
+#endif
+
+instance Monoid (Equivalence a) where
+  mempty = Equivalence (\_ _ -> True)
+  mappend (Equivalence p) (Equivalence q) = Equivalence $ \a b -> p a b && q a 
b
+
+-- | Check for equivalence with '=='.
+--
+-- Note: The instances for 'Double' and 'Float' violate reflexivity for @NaN@.
+defaultEquivalence :: Eq a => Equivalence a
+defaultEquivalence = Equivalence (==)
+
+comparisonEquivalence :: Comparison a -> Equivalence a
+comparisonEquivalence (Comparison p) = Equivalence $ \a b -> p a b == EQ
+
+-- | Dual function arrows.
+newtype Op a b = Op { getOp :: b -> a }
+#ifdef LANGUAGE_DeriveDataTypeable
+  deriving Typeable
+#endif
+
+instance Category Op where
+  id = Op id
+  Op f . Op g = Op (g . f)
+
+instance Contravariant (Op a) where
+  contramap f g = Op (getOp g . f)
+
+#if defined(MIN_VERSION_semigroups) || __GLASGOW_HASKELL__ >= 711
+instance Semigroup a => Semigroup (Op a b) where
+  Op p <> Op q = Op $ \a -> p a <> q a
+#endif
+
+instance Monoid a => Monoid (Op a b) where
+  mempty = Op (const mempty)
+  mappend (Op p) (Op q) = Op $ \a -> mappend (p a) (q a)
+
+#if MIN_VERSION_base(4,5,0)
+instance Num a => Num (Op a b) where
+  Op f + Op g = Op $ \a -> f a + g a
+  Op f * Op g = Op $ \a -> f a * g a
+  Op f - Op g = Op $ \a -> f a - g a
+  abs (Op f) = Op $ abs . f
+  signum (Op f) = Op $ signum . f
+  fromInteger = Op . const . fromInteger
+
+instance Fractional a => Fractional (Op a b) where
+  Op f / Op g = Op $ \a -> f a / g a
+  recip (Op f) = Op $ recip . f
+  fromRational = Op . const . fromRational
+
+instance Floating a => Floating (Op a b) where
+  pi = Op $ const pi
+  exp (Op f) = Op $ exp . f
+  sqrt (Op f) = Op $ sqrt . f
+  log (Op f) = Op $ log . f
+  sin (Op f) = Op $ sin . f
+  tan (Op f) = Op $ tan . f
+  cos (Op f) = Op $ cos . f
+  asin (Op f) = Op $ asin . f
+  atan (Op f) = Op $ atan . f
+  acos (Op f) = Op $ acos . f
+  sinh (Op f) = Op $ sinh . f
+  tanh (Op f) = Op $ tanh . f
+  cosh (Op f) = Op $ cosh . f
+  asinh (Op f) = Op $ asinh . f
+  atanh (Op f) = Op $ atanh . f
+  acosh (Op f) = Op $ acosh . f
+  Op f ** Op g = Op $ \a -> f a ** g a
+  logBase (Op f) (Op g) = Op $ \a -> logBase (f a) (g a)
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/contravariant-1.4.1/src/Data/Functor/Contravariant/Divisible.hs 
new/contravariant-1.5/src/Data/Functor/Contravariant/Divisible.hs
--- old/contravariant-1.4.1/src/Data/Functor/Contravariant/Divisible.hs 
2018-01-18 20:29:34.000000000 +0100
+++ new/contravariant-1.5/src/Data/Functor/Contravariant/Divisible.hs   
2018-07-02 01:07:28.000000000 +0200
@@ -115,7 +115,7 @@
 -- data StringAndInt = StringAndInt String Int
 --
 -- stringAndInt :: Serializer StringAndInt
--- stringAndInt = Serializer $ \(StringAndInt s i) ->
+-- stringAndInt = Serializer $ \\(StringAndInt s i) ->
 --   let sBytes = runSerializer string s
 --       iBytes = runSerializer int i
 --   in sBytes <> iBytes
@@ -133,7 +133,7 @@
 -- instance Divisible Serializer where
 --   conquer = Serializer (const mempty)
 --
---   divide toBC bSerializer cSerializer = Serializer $ \a ->
+--   divide toBC bSerializer cSerializer = Serializer $ \\a ->
 --     case toBC a of
 --       (b, c) ->
 --         let bBytes = runSerializer bSerializer b
@@ -142,7 +142,7 @@
 --
 -- stringAndInt :: Serializer StringAndInt
 -- stringAndInt =
---   divide (\(StringAndInt s i) -> (s, i)) string int
+--   divide (\\(StringAndInt s i) -> (s, i)) string int
 -- @
 --
 class Contravariant f => Divisible f where
@@ -360,7 +360,7 @@
 --
 -- @
 -- identifier :: Serializer Identifier
--- identifier = Serializer $ \identifier ->
+-- identifier = Serializer $ \\identifier ->
 --   case identifier of
 --     StringId s -> runSerializer string s
 --     IntId i -> runSerializer int i
@@ -371,8 +371,8 @@
 --
 -- @
 -- instance Decidable Serializer where
---   lose f = Serializer $ \a -> absurd (f a)
---   choose split l r = Serializer $ \a ->
+--   lose f = Serializer $ \\a -> absurd (f a)
+--   choose split l r = Serializer $ \\a ->
 --     either (runSerializer l) (runSerializer r) (split a)
 -- @
 --
@@ -589,7 +589,7 @@
 -- 'divide' f m 'conquer' = 'contramap' ('fst' . f) m
 -- 'divide' f 'conquer' m = 'contramap' ('snd' . f) m
 -- 'divide' f ('divide' g m n) o = 'divide' f' m ('divide' 'id' n o) where
---   f' a = case f a of (bc,d) -> case g bc of (b,c) -> (a,(b,c))
+--   f' a = let (bc, d) = f a; (b, c) = g bc in (b, (c, d))
 -- @
 
 -- $conquer
@@ -611,8 +611,8 @@
 -- @
 -- 'choose' 'Left' m ('lose' f)  = m
 -- 'choose' 'Right' ('lose' f) m = m
--- 'choose' f ('choose' g m n) o = 'divide' f' m ('divide' 'id' n o) where
---   f' bcd = 'either' ('either' 'id' ('Right' . 'Left') . g) ('Right' . 
'Right') . f
+-- 'choose' f ('choose' g m n) o = 'choose' f' m ('choose' 'id' n o) where
+--   f' = 'either' ('either' 'id' 'Left' . g) ('Right' . 'Right') . f
 -- @
 --
 -- In addition, we expect the same kind of distributive law as is satisfied by 
the usual
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/contravariant-1.4.1/src/Data/Functor/Contravariant.hs 
new/contravariant-1.5/src/Data/Functor/Contravariant.hs
--- old/contravariant-1.4.1/src/Data/Functor/Contravariant.hs   2018-01-18 
20:29:34.000000000 +0100
+++ new/contravariant-1.5/src/Data/Functor/Contravariant.hs     1970-01-01 
01:00:00.000000000 +0100
@@ -1,458 +0,0 @@
-{-# LANGUAGE CPP #-}
-{-# LANGUAGE TypeOperators #-}
-
-#ifdef __GLASGOW_HASKELL__
-#define LANGUAGE_DeriveDataTypeable
-{-# LANGUAGE DeriveDataTypeable #-}
-#endif
-
-#ifndef MIN_VERSION_tagged
-#define MIN_VERSION_tagged(x,y,z) 1
-#endif
-
-#ifndef MIN_VERSION_base
-#define MIN_VERSION_base(x,y,z) 1
-#endif
-
-#if __GLASGOW_HASKELL__ >= 704
-#if MIN_VERSION_transformers(0,3,0) && MIN_VERSION_tagged(0,6,1)
-{-# LANGUAGE Safe #-}
-#else
-{-# LANGUAGE Trustworthy #-}
-#endif
-#endif
-
-{-# OPTIONS_GHC -fno-warn-deprecations #-}
-
------------------------------------------------------------------------------
--- |
--- Module      :  Data.Functor.Contravariant
--- Copyright   :  (C) 2007-2015 Edward Kmett
--- License     :  BSD-style (see the file LICENSE)
---
--- Maintainer  :  Edward Kmett <ekm...@gmail.com>
--- Stability   :  provisional
--- Portability :  portable
---
--- 'Contravariant' functors, sometimes referred to colloquially as @Cofunctor@,
--- even though the dual of a 'Functor' is just a 'Functor'. As with 'Functor'
--- the definition of 'Contravariant' for a given ADT is unambiguous.
-----------------------------------------------------------------------------
-
-module Data.Functor.Contravariant (
-  -- * Contravariant Functors
-    Contravariant(..)
-  , phantom
-
-  -- * Operators
-  , (>$<), (>$$<), ($<)
-
-  -- * Predicates
-  , Predicate(..)
-
-  -- * Comparisons
-  , Comparison(..)
-  , defaultComparison
-
-  -- * Equivalence Relations
-  , Equivalence(..)
-  , defaultEquivalence
-  , comparisonEquivalence
-
-  -- * Dual arrows
-  , Op(..)
-  ) where
-
-import Control.Applicative
-import Control.Applicative.Backwards
-
-import Control.Category
-
-import Control.Monad.Trans.Error
-import Control.Monad.Trans.Except
-import Control.Monad.Trans.Identity
-import Control.Monad.Trans.List
-import Control.Monad.Trans.Maybe
-import qualified Control.Monad.Trans.RWS.Lazy as Lazy
-import qualified Control.Monad.Trans.RWS.Strict as Strict
-import Control.Monad.Trans.Reader
-import qualified Control.Monad.Trans.State.Lazy as Lazy
-import qualified Control.Monad.Trans.State.Strict as Strict
-import qualified Control.Monad.Trans.Writer.Lazy as Lazy
-import qualified Control.Monad.Trans.Writer.Strict as Strict
-
-import Data.Function (on)
-
-import Data.Functor.Product
-import Data.Functor.Sum
-import Data.Functor.Constant
-import Data.Functor.Compose
-import Data.Functor.Reverse
-
-#if MIN_VERSION_base(4,8,0)
-import Data.Monoid (Alt(..))
-#else
-import Data.Monoid (Monoid(..))
-#endif
-
-#if defined(MIN_VERSION_semigroups) || __GLASGOW_HASKELL__ >= 711
-import Data.Semigroup (Semigroup(..))
-#endif
-
-#ifdef LANGUAGE_DeriveDataTypeable
-import Data.Typeable
-#endif
-
-#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ < 707 && 
defined(VERSION_tagged)
-import Data.Proxy
-#endif
-
-#ifdef MIN_VERSION_StateVar
-import Data.StateVar
-#endif
-
-#if __GLASGOW_HASKELL__ >= 702
-#define GHC_GENERICS
-import GHC.Generics
-#endif
-
-import Prelude hiding ((.),id)
-
--- | The class of contravariant functors.
---
--- Whereas in Haskell, one can think of a 'Functor' as containing or producing
--- values, a contravariant functor is a functor that can be thought of as
--- /consuming/ values.
---
--- As an example, consider the type of predicate functions  @a -> Bool@. One
--- such predicate might be @negative x = x < 0@, which
--- classifies integers as to whether they are negative. However, given this
--- predicate, we can re-use it in other situations, providing we have a way to
--- map values /to/ integers. For instance, we can use the @negative@ predicate
--- on a person's bank balance to work out if they are currently overdrawn:
---
--- @
--- newtype Predicate a = Predicate { getPredicate :: a -> Bool }
---
--- instance Contravariant Predicate where
---   contramap f (Predicate p) = Predicate (p . f)
---                                          |   `- First, map the input...
---                                          `----- then apply the predicate.
---
--- overdrawn :: Predicate Person
--- overdrawn = contramap personBankBalance negative
--- @
---
--- Any instance should be subject to the following laws:
---
--- > contramap id = id
--- > contramap f . contramap g = contramap (g . f)
---
--- Note, that the second law follows from the free theorem of the type of
--- 'contramap' and the first law, so you need only check that the former
--- condition holds.
-
-class Contravariant f where
-  contramap :: (a -> b) -> f b -> f a
-
-  -- | Replace all locations in the output with the same value.
-  -- The default definition is @'contramap' . 'const'@, but this may be
-  -- overridden with a more efficient version.
-  (>$) :: b -> f b -> f a
-  (>$) = contramap . const
-
--- | If 'f' is both 'Functor' and 'Contravariant' then by the time you factor 
in the laws
--- of each of those classes, it can't actually use its argument in any 
meaningful capacity.
---
--- This method is surprisingly useful. Where both instances exist and are 
lawful we have
--- the following laws:
---
--- @
--- 'fmap' f ≡ 'phantom'
--- 'contramap' f ≡ 'phantom'
--- @
-phantom :: (Functor f, Contravariant f) => f a -> f b
-phantom x = () <$ x $< ()
-
-infixl 4 >$, $<, >$<, >$$<
-
--- | This is '>$' with its arguments flipped.
-($<) :: Contravariant f => f b -> b -> f a
-($<) = flip (>$)
-{-# INLINE ($<) #-}
-
--- | This is an infix alias for 'contramap'
-(>$<) :: Contravariant f => (a -> b) -> f b -> f a
-(>$<) = contramap
-{-# INLINE (>$<) #-}
-
--- | This is an infix version of 'contramap' with the arguments flipped.
-(>$$<) :: Contravariant f => f b -> (a -> b) -> f a
-(>$$<) = flip contramap
-{-# INLINE (>$$<) #-}
-
-#if MIN_VERSION_base(4,8,0)
-instance Contravariant f => Contravariant (Alt f) where
-  contramap f = Alt . contramap f . getAlt
-#endif
-
-#ifdef GHC_GENERICS
-instance Contravariant V1 where
-  contramap _ x = x `seq` undefined
-
-instance Contravariant U1 where
-  contramap _ U1 = U1
-
-instance Contravariant f => Contravariant (Rec1 f) where
-  contramap f (Rec1 fp)= Rec1 (contramap f fp)
-
-instance Contravariant f => Contravariant (M1 i c f) where
-  contramap f (M1 fp) = M1 (contramap f fp)
-
-instance Contravariant (K1 i c) where
-  contramap _ (K1 c) = K1 c
-
-instance (Contravariant f, Contravariant g) => Contravariant (f :*: g) where
-  contramap f (xs :*: ys) = contramap f xs :*: contramap f ys
-
-instance (Functor f, Contravariant g) => Contravariant (f :.: g) where
-  contramap f (Comp1 fg) = Comp1 (fmap (contramap f) fg)
-  {-# INLINE contramap #-}
-
-instance (Contravariant f, Contravariant g) => Contravariant (f :+: g) where
-  contramap f (L1 xs) = L1 (contramap f xs)
-  contramap f (R1 ys) = R1 (contramap f ys)
-#endif
-
-instance Contravariant m => Contravariant (ErrorT e m) where
-  contramap f = ErrorT . contramap (fmap f) . runErrorT
-
-instance Contravariant m => Contravariant (ExceptT e m) where
-  contramap f = ExceptT . contramap (fmap f) . runExceptT
-
-instance Contravariant f => Contravariant (IdentityT f) where
-  contramap f = IdentityT . contramap f . runIdentityT
-
-instance Contravariant m => Contravariant (ListT m) where
-  contramap f = ListT . contramap (fmap f) . runListT
-
-instance Contravariant m => Contravariant (MaybeT m) where
-  contramap f = MaybeT . contramap (fmap f) . runMaybeT
-
-instance Contravariant m => Contravariant (Lazy.RWST r w s m) where
-  contramap f m = Lazy.RWST $ \r s ->
-    contramap (\ ~(a, s', w) -> (f a, s', w)) $ Lazy.runRWST m r s
-
-instance Contravariant m => Contravariant (Strict.RWST r w s m) where
-  contramap f m = Strict.RWST $ \r s ->
-    contramap (\ (a, s', w) -> (f a, s', w)) $ Strict.runRWST m r s
-
-instance Contravariant m => Contravariant (ReaderT r m) where
-  contramap f = ReaderT . fmap (contramap f) . runReaderT
-
-instance Contravariant m => Contravariant (Lazy.StateT s m) where
-  contramap f m = Lazy.StateT $ \s ->
-    contramap (\ ~(a, s') -> (f a, s')) $ Lazy.runStateT m s
-
-instance Contravariant m => Contravariant (Strict.StateT s m) where
-  contramap f m = Strict.StateT $ \s ->
-    contramap (\ (a, s') -> (f a, s')) $ Strict.runStateT m s
-
-instance Contravariant m => Contravariant (Lazy.WriterT w m) where
-  contramap f = Lazy.mapWriterT $ contramap $ \ ~(a, w) -> (f a, w)
-
-instance Contravariant m => Contravariant (Strict.WriterT w m) where
-  contramap f = Strict.mapWriterT $ contramap $ \ (a, w) -> (f a, w)
-
-instance (Contravariant f, Contravariant g) => Contravariant (Sum f g) where
-  contramap f (InL xs) = InL (contramap f xs)
-  contramap f (InR ys) = InR (contramap f ys)
-
-instance (Contravariant f, Contravariant g) => Contravariant (Product f g) 
where
-  contramap f (Pair a b) = Pair (contramap f a) (contramap f b)
-
-instance Contravariant (Constant a) where
-  contramap _ (Constant a) = Constant a
-
-instance Contravariant (Const a) where
-  contramap _ (Const a) = Const a
-
-instance (Functor f, Contravariant g) => Contravariant (Compose f g) where
-  contramap f (Compose fga) = Compose (fmap (contramap f) fga)
-  {-# INLINE contramap #-}
-
-instance Contravariant f => Contravariant (Backwards f) where
-  contramap f = Backwards . contramap f . forwards
-  {-# INLINE contramap #-}
-
-instance Contravariant f => Contravariant (Reverse f) where
-  contramap f = Reverse . contramap f . getReverse
-  {-# INLINE contramap #-}
-
-#ifdef MIN_VERSION_StateVar
-instance Contravariant SettableStateVar where
-  contramap f (SettableStateVar k) = SettableStateVar (k . f)
-  {-# INLINE contramap #-}
-#endif
-
-#if (__GLASGOW_HASKELL__ >= 707) || defined(VERSION_tagged)
-instance Contravariant Proxy where
-  contramap _ Proxy = Proxy
-#endif
-
-newtype Predicate a = Predicate { getPredicate :: a -> Bool }
-#ifdef LANGUAGE_DeriveDataTypeable
-  deriving Typeable
-#endif
-
--- | A 'Predicate' is a 'Contravariant' 'Functor', because 'contramap' can
--- apply its function argument to the input of the predicate.
-instance Contravariant Predicate where
-  contramap f g = Predicate $ getPredicate g . f
-
-#if defined(MIN_VERSION_semigroups) || __GLASGOW_HASKELL__ >= 711
-instance Semigroup (Predicate a) where
-  Predicate p <> Predicate q = Predicate $ \a -> p a && q a
-#endif
-
-instance Monoid (Predicate a) where
-  mempty = Predicate $ const True
-#if defined(MIN_VERSION_semigroups) || __GLASGOW_HASKELL__ >= 711
-  mappend = (<>)
-#else
-  mappend (Predicate p) (Predicate q) = Predicate $ \a -> p a && q a
-#endif
-
--- | Defines a total ordering on a type as per 'compare'
---
--- This condition is not checked by the types. You must ensure that the 
supplied
--- values are valid total orderings yourself.
-newtype Comparison a = Comparison { getComparison :: a -> a -> Ordering }
-#ifdef LANGUAGE_DeriveDataTypeable
-  deriving Typeable
-#endif
-
--- | A 'Comparison' is a 'Contravariant' 'Functor', because 'contramap' can
--- apply its function argument to each input of the comparison function.
-instance Contravariant Comparison where
-  contramap f g = Comparison $ on (getComparison g) f
-
-#if defined(MIN_VERSION_semigroups) || __GLASGOW_HASKELL__ >= 711
-instance Semigroup (Comparison a) where
-  Comparison p <> Comparison q = Comparison $ mappend p q
-#endif
-
-instance Monoid (Comparison a) where
-  mempty = Comparison (\_ _ -> EQ)
-  mappend (Comparison p) (Comparison q) = Comparison $ mappend p q
-
--- | Compare using 'compare'
-defaultComparison :: Ord a => Comparison a
-defaultComparison = Comparison compare
-
--- | This data type represents an equivalence relation.
---
--- Equivalence relations are expected to satisfy three laws:
---
--- __Reflexivity__:
---
--- @
--- 'getEquivalence' f a a = True
--- @
---
--- __Symmetry__:
---
--- @
--- 'getEquivalence' f a b = 'getEquivalence' f b a
--- @
---
--- __Transitivity__:
---
--- If @'getEquivalence' f a b@ and @'getEquivalence' f b c@ are both 'True' 
then so is @'getEquivalence' f a c@
---
--- The types alone do not enforce these laws, so you'll have to check them 
yourself.
-newtype Equivalence a = Equivalence { getEquivalence :: a -> a -> Bool }
-#ifdef LANGUAGE_DeriveDataTypeable
-  deriving Typeable
-#endif
-
--- | Equivalence relations are 'Contravariant', because you can
--- apply the contramapped function to each input to the equivalence
--- relation.
-instance Contravariant Equivalence where
-  contramap f g = Equivalence $ on (getEquivalence g) f
-
-#if defined(MIN_VERSION_semigroups) || __GLASGOW_HASKELL__ >= 711
-instance Semigroup (Equivalence a) where
-  Equivalence p <> Equivalence q = Equivalence $ \a b -> p a b && q a b
-#endif
-
-instance Monoid (Equivalence a) where
-  mempty = Equivalence (\_ _ -> True)
-  mappend (Equivalence p) (Equivalence q) = Equivalence $ \a b -> p a b && q a 
b
-
--- | Check for equivalence with '=='
---
--- Note: The instances for 'Double' and 'Float' violate reflexivity for @NaN@.
-defaultEquivalence :: Eq a => Equivalence a
-defaultEquivalence = Equivalence (==)
-
-comparisonEquivalence :: Comparison a -> Equivalence a
-comparisonEquivalence (Comparison p) = Equivalence $ \a b -> p a b == EQ
-
--- | Dual function arrows.
-newtype Op a b = Op { getOp :: b -> a }
-#ifdef LANGUAGE_DeriveDataTypeable
-  deriving Typeable
-#endif
-
-instance Category Op where
-  id = Op id
-  Op f . Op g = Op (g . f)
-
-instance Contravariant (Op a) where
-  contramap f g = Op (getOp g . f)
-
-#if defined(MIN_VERSION_semigroups) || __GLASGOW_HASKELL__ >= 711
-instance Semigroup a => Semigroup (Op a b) where
-  Op p <> Op q = Op $ \a -> p a <> q a
-#endif
-
-instance Monoid a => Monoid (Op a b) where
-  mempty = Op (const mempty)
-  mappend (Op p) (Op q) = Op $ \a -> mappend (p a) (q a)
-
-#if MIN_VERSION_base(4,5,0)
-instance Num a => Num (Op a b) where
-  Op f + Op g = Op $ \a -> f a + g a
-  Op f * Op g = Op $ \a -> f a * g a
-  Op f - Op g = Op $ \a -> f a - g a
-  abs (Op f) = Op $ abs . f
-  signum (Op f) = Op $ signum . f
-  fromInteger = Op . const . fromInteger
-
-instance Fractional a => Fractional (Op a b) where
-  Op f / Op g = Op $ \a -> f a / g a
-  recip (Op f) = Op $ recip . f
-  fromRational = Op . const . fromRational
-
-instance Floating a => Floating (Op a b) where
-  pi = Op $ const pi
-  exp (Op f) = Op $ exp . f
-  sqrt (Op f) = Op $ sqrt . f
-  log (Op f) = Op $ log . f
-  sin (Op f) = Op $ sin . f
-  tan (Op f) = Op $ tan . f
-  cos (Op f) = Op $ cos . f
-  asin (Op f) = Op $ asin . f
-  atan (Op f) = Op $ atan . f
-  acos (Op f) = Op $ acos . f
-  sinh (Op f) = Op $ sinh . f
-  tanh (Op f) = Op $ tanh . f
-  cosh (Op f) = Op $ cosh . f
-  asinh (Op f) = Op $ asinh . f
-  atanh (Op f) = Op $ atanh . f
-  acosh (Op f) = Op $ acosh . f
-  Op f ** Op g = Op $ \a -> f a ** g a
-  logBase (Op f) (Op g) = Op $ \a -> logBase (f a) (g a)
-#endif


Reply via email to