Hello community,

here is the log from the commit of package ghc-recursion-schemes for 
openSUSE:Factory checked in at 2016-10-24 14:44:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-recursion-schemes (Old)
 and      /work/SRC/openSUSE:Factory/.ghc-recursion-schemes.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ghc-recursion-schemes"

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/ghc-recursion-schemes/ghc-recursion-schemes.changes  
    2016-07-27 16:10:14.000000000 +0200
+++ 
/work/SRC/openSUSE:Factory/.ghc-recursion-schemes.new/ghc-recursion-schemes.changes
 2016-10-24 14:44:28.000000000 +0200
@@ -2 +2 @@
-Sun Jul 10 17:22:28 UTC 2016 - psim...@suse.com
+Wed Sep 21 13:06:46 UTC 2016 - psim...@suse.com
@@ -4,6 +4 @@
-- Update to version 4.1.2 revision 0 with cabal2obs.
-
--------------------------------------------------------------------
-Fri Jan 29 10:38:20 UTC 2016 - mimi...@gmail.com
-
-- initial commit
+- Update to version 5 with cabal2obs.

Old:
----
  recursion-schemes-4.1.2.tar.gz

New:
----
  recursion-schemes-5.tar.gz

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

Other differences:
------------------
++++++ ghc-recursion-schemes.spec ++++++
--- /var/tmp/diff_new_pack.AcwTD8/_old  2016-10-24 14:44:29.000000000 +0200
+++ /var/tmp/diff_new_pack.AcwTD8/_new  2016-10-24 14:44:29.000000000 +0200
@@ -18,21 +18,21 @@
 
 %global pkg_name recursion-schemes
 Name:           ghc-%{pkg_name}
-Version:        4.1.2
+Version:        5
 Release:        0
 Summary:        Generalized bananas, lenses and barbed wire
 License:        BSD-2-Clause
-Group:          System/Libraries
+Group:          Development/Languages/Other
 Url:            https://hackage.haskell.org/package/%{pkg_name}
 Source0:        
https://hackage.haskell.org/package/%{pkg_name}-%{version}/%{pkg_name}-%{version}.tar.gz
 BuildRequires:  ghc-Cabal-devel
-# Begin cabal-rpm deps:
+BuildRequires:  ghc-bifunctors-devel
 BuildRequires:  ghc-comonad-devel
 BuildRequires:  ghc-free-devel
 BuildRequires:  ghc-rpm-macros
+BuildRequires:  ghc-transformers-compat-devel
 BuildRequires:  ghc-transformers-devel
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
-# End cabal-rpm deps
 
 %description
 Generalized bananas, lenses and barbed wire.
@@ -52,15 +52,12 @@
 %prep
 %setup -q -n %{pkg_name}-%{version}
 
-
 %build
 %ghc_lib_build
 
-
 %install
 %ghc_lib_install
 
-
 %post devel
 %ghc_pkg_recache
 
@@ -73,6 +70,6 @@
 
 %files devel -f %{name}-devel.files
 %defattr(-,root,root,-)
-%doc CHANGELOG.markdown
+%doc CHANGELOG.markdown README.markdown
 
 %changelog

++++++ recursion-schemes-4.1.2.tar.gz -> recursion-schemes-5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/recursion-schemes-4.1.2/.gitignore 
new/recursion-schemes-5/.gitignore
--- old/recursion-schemes-4.1.2/.gitignore      1970-01-01 01:00:00.000000000 
+0100
+++ new/recursion-schemes-5/.gitignore  2016-09-14 23:39:23.000000000 +0200
@@ -0,0 +1,21 @@
+dist/
+dist-newstyle/
+.stack-work/
+.hsenv/
+docs
+wiki
+TAGS
+tags
+wip
+.DS_Store
+.*.swp
+.*.swo
+*.o
+*.hi
+*~
+*#
+.cabal-sandbox/
+cabal.sandbox.config
+codex.tags
+src/highlight.js
+src/style.css
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/recursion-schemes-4.1.2/.travis.yml 
new/recursion-schemes-5/.travis.yml
--- old/recursion-schemes-4.1.2/.travis.yml     2015-06-03 11:41:44.000000000 
+0200
+++ new/recursion-schemes-5/.travis.yml 2016-09-14 23:39:23.000000000 +0200
@@ -1 +1,88 @@
-language: haskell
+# This file has been generated -- see https://github.com/hvr/multi-ghc-travis
+language: c
+sudo: false
+
+cache:
+  directories:
+    - $HOME/.cabsnap
+    - $HOME/.cabal/packages
+
+before_cache:
+  - rm -fv $HOME/.cabal/packages/hackage.haskell.org/build-reports.log
+  - rm -fv $HOME/.cabal/packages/hackage.haskell.org/00-index.tar
+
+matrix:
+  include:
+    - env: CABALVER=1.16 GHCVER=7.4.2
+      compiler: ": #GHC 7.4.2"
+      addons: {apt: {packages: [cabal-install-1.16,ghc-7.4.2], sources: 
[hvr-ghc]}}
+    - env: CABALVER=1.16 GHCVER=7.6.3
+      compiler: ": #GHC 7.6.3"
+      addons: {apt: {packages: [cabal-install-1.16,ghc-7.6.3], sources: 
[hvr-ghc]}}
+    - env: CABALVER=1.18 GHCVER=7.8.4
+      compiler: ": #GHC 7.8.4"
+      addons: {apt: {packages: [cabal-install-1.18,ghc-7.8.4], sources: 
[hvr-ghc]}}
+    - env: CABALVER=1.22 GHCVER=7.10.3
+      compiler: ": #GHC 7.10.3"
+      addons: {apt: {packages: [cabal-install-1.22,ghc-7.10.3], sources: 
[hvr-ghc]}}
+    - env: CABALVER=1.24 GHCVER=8.0.1
+      compiler: ": #GHC 8.0.1b"
+      addons: {apt: {packages: [cabal-install-1.24,ghc-8.0.1], sources: 
[hvr-ghc]}}
+
+before_install:
+ - unset CC
+ - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH
+
+install:
+ - cabal --version
+ - echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || 
echo '?')]"
+ - if [ -f $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz ];
+   then
+     zcat $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz >
+          $HOME/.cabal/packages/hackage.haskell.org/00-index.tar;
+   fi
+ - travis_retry cabal update -v
+ - sed -i 's/^jobs:/-- jobs:/' ${HOME}/.cabal/config
+ - cabal install --only-dependencies --enable-tests --enable-benchmarks --dry 
-v > installplan.txt
+ - sed -i -e '1,/^Resolving /d' installplan.txt; cat installplan.txt
+
+# check whether current requested install-plan matches cached package-db 
snapshot
+ - if diff -u installplan.txt $HOME/.cabsnap/installplan.txt;
+   then
+     echo "cabal build-cache HIT";
+     rm -rfv .ghc;
+     cp -a $HOME/.cabsnap/ghc $HOME/.ghc;
+     cp -a $HOME/.cabsnap/lib $HOME/.cabsnap/share $HOME/.cabsnap/bin 
$HOME/.cabal/;
+   else
+     echo "cabal build-cache MISS";
+     rm -rf $HOME/.cabsnap;
+     mkdir -p $HOME/.ghc $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin;
+     cabal install --only-dependencies --enable-tests --enable-benchmarks;
+   fi
+
+# snapshot package-db on cache miss
+ - if [ ! -d $HOME/.cabsnap ];
+   then
+      echo "snapshotting package-db to build-cache";
+      mkdir $HOME/.cabsnap;
+      cp -a $HOME/.ghc $HOME/.cabsnap/ghc;
+      cp -a $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin 
installplan.txt $HOME/.cabsnap/;
+   fi
+
+# Here starts the actual work to be performed for the package under test;
+# any command which exits with a non-zero exit code causes the build to fail.
+script:
+ - if [ -f configure.ac ]; then autoreconf -i; fi
+ - cabal configure --enable-tests --enable-benchmarks -v2  # -v2 provides 
useful information for debugging
+ - cabal build   # this builds all libraries and executables (including 
tests/benchmarks)
+ - cabal test
+ - cabal check
+ - cabal sdist   # tests that a source-distribution can be generated
+
+# Check that the resulting source distribution can be built & installed.
+# If there are no other `.tar.gz` files in `dist`, this can be even simpler:
+# `cabal install --force-reinstalls dist/*-*.tar.gz`
+ - SRC_TGZ=$(cabal info . | awk '{print $2;exit}').tar.gz &&
+   (cd dist && cabal install --force-reinstalls "$SRC_TGZ")
+
+# EOF
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/recursion-schemes-4.1.2/CHANGELOG.markdown 
new/recursion-schemes-5/CHANGELOG.markdown
--- old/recursion-schemes-4.1.2/CHANGELOG.markdown      2015-06-03 
11:41:44.000000000 +0200
+++ new/recursion-schemes-5/CHANGELOG.markdown  2016-09-14 23:39:23.000000000 
+0200
@@ -1,3 +1,12 @@
+## 5
+* Renamed `Foldable` to `Recursive` and `Unfoldable` to `Corecursive`. With 
`Foldable` in `Prelude` in GHC 7.10+, having a needlessly conflicting name 
seemed silly.
+* Add support for GHC-8.0.1
+* Use `Eq1`, `Ord1`, `Show1`, `Read1` to derive `Fix`, `Nu` and `Mu` `Eq`, 
`Ord` `Show` and `Read` instances
+* Remove `Prim` data family. `ListF` as a new name for `Prim [a]`, with plenty 
of instances, e.g. `Traversable`.
+* Export `unfix`
+* Add chronomorphisms: `chrono` and `gchrono`.
+* Add `distGApoT`
+
 ## 4.1.2
 * Support for `free` 4.12.1
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/recursion-schemes-4.1.2/Data/Functor/Foldable.hs 
new/recursion-schemes-5/Data/Functor/Foldable.hs
--- old/recursion-schemes-4.1.2/Data/Functor/Foldable.hs        2015-06-03 
11:41:44.000000000 +0200
+++ new/recursion-schemes-5/Data/Functor/Foldable.hs    2016-09-14 
23:39:23.000000000 +0200
@@ -1,13 +1,32 @@
 {-# LANGUAGE CPP, TypeFamilies, Rank2Types, FlexibleContexts, 
FlexibleInstances, GADTs, StandaloneDeriving, UndecidableInstances #-}
+
+-- explicit dictionary higher-kind instances are defined in
+-- - base-4.9
+-- - transformers >= 0.5
+-- - transformes-compat >= 0.5 when transformers aren't 0.4
+#define EXPLICIT_DICT_FUNCTOR_CLASSES (MIN_VERSION_base(4,9,0) || 
MIN_VERSION_transformers(0,5,0) || (MIN_VERSION_transformers_compat(0,5,0) && 
!MIN_VERSION_transformers(0,4,0)))
+
+#define HAS_GENERIC (__GLASGOW_HASKELL__ >= 702)
+#define HAS_GENERIC1 (__GLASGOW_HASKELL__ >= 706)
+
+-- Polymorphic typeable
+#define HAS_POLY_TYPEABLE MIN_VERSION_base(4,7,0)
+
 #ifdef __GLASGOW_HASKELL__
-#if MIN_VERSION_base(4,7,0)
 {-# LANGUAGE DeriveDataTypeable #-}
+#if __GLASGOW_HASKELL__ >= 800
+{-# LANGUAGE ConstrainedClassMethods #-}
 #endif
+#if HAS_GENERIC
+{-# LANGUAGE DeriveGeneric #-}
 #endif
+#endif
+
+
+
 -----------------------------------------------------------------------------
 -- |
--- Module      :  Data.Functor.Foldable
--- Copyright   :  (C) 2008-2013 Edward Kmett
+-- Copyright   :  (C) 2008-2015 Edward Kmett
 -- License     :  BSD-style (see the file LICENSE)
 --
 -- Maintainer  :  Edward Kmett <ekm...@gmail.com>
@@ -19,13 +38,13 @@
   (
   -- * Base functors for fixed points
     Base
+  , ListF(..)
   -- * Fixed points
-  , Fix(..)
+  , Fix(..), unfix
   , Mu(..)
   , Nu(..)
-  , Prim(..)
   -- * Folding
-  , Foldable(..)
+  , Recursive(..)
   -- ** Combinators
   , gapo
   , gcata
@@ -34,6 +53,8 @@
   , histo
   , ghisto
   , futu
+  , chrono
+  , gchrono
   -- ** Distributive laws
   , distCata
   , distPara
@@ -45,13 +66,14 @@
   , distFutu
   , distGFutu
   -- * Unfolding
-  , Unfoldable(..)
+  , Corecursive(..)
   -- ** Combinators
   , gana
   -- ** Distributive laws
   , distAna
   , distApo
   , distGApo
+  , distGApoT
   -- * Refolding
   , hylo
   , ghylo
@@ -79,28 +101,40 @@
 import Control.Comonad.Cofree (Cofree(..))
 import Control.Monad (liftM, join)
 import Control.Monad.Free (Free(..))
+import Control.Monad.Trans.Except (ExceptT(..), runExceptT)
 import Data.Functor.Identity
 import Control.Arrow
 import Data.Function (on)
+import Data.Functor.Classes
 import Text.Read
+import Text.Show
 #ifdef __GLASGOW_HASKELL__
 import Data.Data hiding (gunfold)
-#if MIN_VERSION_base(4,7,0)
+#if HAS_POLY_TYPEABLE
 #else
 import qualified Data.Data as Data
 #endif
-#if MIN_VERSION_base(4,8,0)
-import Prelude hiding (Foldable)
+#if HAS_GENERIC
+import GHC.Generics (Generic)
+#endif
+#if HAS_GENERIC1
+import GHC.Generics (Generic1)
 #endif
 #endif
 
-type family Base t :: * -> *
+import Data.Monoid (Monoid (..))
+import Prelude
 
-data family Prim t :: * -> *
--- type instance Base (Maybe a) = Const (Maybe a)
--- type instance Base (Either a b) = Const (Either a b)
+import qualified Data.Foldable as F
+import qualified Data.Traversable as T
 
-class Functor (Base t) => Foldable t where
+import qualified Data.Bifunctor as Bi
+import qualified Data.Bifoldable as Bi
+import qualified Data.Bitraversable as Bi
+
+type family Base t :: * -> *
+
+class Functor (Base t) => Recursive t where
   project :: t -> Base t t
 
   cata :: (Base t a -> a) -- ^ a (Base t)-algebra
@@ -111,12 +145,12 @@
   para :: (Base t (t, a) -> a) -> t -> a
   para t = p where p x = t . fmap ((,) <*> p) $ project x
 
-  gpara :: (Unfoldable t, Comonad w) => (forall b. Base t (w b) -> w (Base t 
b)) -> (Base t (EnvT t w a) -> a) -> t -> a
+  gpara :: (Corecursive t, Comonad w) => (forall b. Base t (w b) -> w (Base t 
b)) -> (Base t (EnvT t w a) -> a) -> t -> a
   gpara t = gzygo embed t
 
   -- | Fokkinga's prepromorphism
   prepro
-    :: Unfoldable t
+    :: Corecursive t
     => (forall b. Base t b -> Base t b)
     -> (Base t a -> a)
     -> t
@@ -125,7 +159,7 @@
 
   --- | A generalized prepromorphism
   gprepro
-    :: (Unfoldable t, Comonad w)
+    :: (Corecursive t, Comonad w)
     => (forall b. Base t (w b) -> w (Base t b))
     -> (forall c. Base t c -> Base t c)
     -> (Base t (w a) -> a)
@@ -133,13 +167,13 @@
     -> a
   gprepro k e f = extract . c where c = fmap f . k . fmap (duplicate . c . 
cata (embed . e)) . project
 
-distPara :: Unfoldable t => Base t (t, a) -> (t, Base t a)
+distPara :: Corecursive t => Base t (t, a) -> (t, Base t a)
 distPara = distZygo embed
 
-distParaT :: (Unfoldable t, Comonad w) => (forall b. Base t (w b) -> w (Base t 
b)) -> Base t (EnvT t w a) -> EnvT t w (Base t a)
+distParaT :: (Corecursive t, Comonad w) => (forall b. Base t (w b) -> w (Base 
t b)) -> Base t (EnvT t w a) -> EnvT t w (Base t a)
 distParaT t = distZygoT embed t
 
-class Functor (Base t) => Unfoldable t where
+class Functor (Base t) => Corecursive t where
   embed :: Base t t -> t
   ana
     :: (a -> Base t a) -- ^ a (Base t)-coalgebra
@@ -147,12 +181,12 @@
     -> t               -- ^ resulting fixed point
   ana g = a where a = embed . fmap a . g
 
-  apo :: Foldable t => (a -> Base t (Either t a)) -> a -> t
+  apo :: (a -> Base t (Either t a)) -> a -> t
   apo g = a where a = embed . (fmap (either id a)) . g
 
   -- | Fokkinga's postpromorphism
   postpro
-    :: Foldable t
+    :: Recursive t
     => (forall b. Base t b -> Base t b) -- natural transformation
     -> (a -> Base t a)                  -- a (Base t)-coalgebra
     -> a                                -- seed
@@ -161,7 +195,7 @@
 
   -- | A generalized postpromorphism
   gpostpro
-    :: (Foldable t, Monad m)
+    :: (Recursive t, Monad m)
     => (forall b. m (Base t b) -> Base t (m b)) -- distributive law
     -> (forall c. Base t c -> Base t c)         -- natural transformation
     -> (a -> Base t (m a))                      -- a (Base t)-m-coalgebra
@@ -172,29 +206,111 @@
 hylo :: Functor f => (f b -> b) -> (a -> f a) -> a -> b
 hylo f g = h where h = f . fmap h . g
 
-fold :: Foldable t => (Base t a -> a) -> t -> a
+fold :: Recursive t => (Base t a -> a) -> t -> a
 fold = cata
 
-unfold :: Unfoldable t => (a -> Base t a) -> a -> t
+unfold :: Corecursive t => (a -> Base t a) -> a -> t
 unfold = ana
 
 refold :: Functor f => (f b -> b) -> (a -> f a) -> a -> b
 refold = hylo
 
-data instance Prim [a] b = Cons a b | Nil deriving (Eq,Ord,Show,Read)
-instance Functor (Prim [a]) where
+-- | Base functor of @[]@.
+data ListF a b = Nil | Cons a b
+  deriving (Eq,Ord,Show,Read,Typeable
+#if HAS_GENERIC
+          , Generic
+#endif
+#if HAS_GENERIC1
+          , Generic1
+#endif
+          )
+
+#if EXPLICIT_DICT_FUNCTOR_CLASSES
+instance Eq2 ListF where
+  liftEq2 _ _ Nil        Nil          = True
+  liftEq2 f g (Cons a b) (Cons a' b') = f a a' && g b b'
+  liftEq2 _ _ _          _            = False
+
+instance Eq a => Eq1 (ListF a) where
+  liftEq = liftEq2 (==)
+
+instance Ord2 ListF where
+  liftCompare2 _ _ Nil        Nil          = EQ
+  liftCompare2 _ _ Nil        _            = LT
+  liftCompare2 _ _ _          Nil          = GT
+  liftCompare2 f g (Cons a b) (Cons a' b') = f a a' `mappend` g b b'
+
+instance Ord a => Ord1 (ListF a) where
+  liftCompare = liftCompare2 compare
+
+instance Show a => Show1 (ListF a) where
+  liftShowsPrec = liftShowsPrec2 showsPrec showList
+
+instance Show2 ListF where
+  liftShowsPrec2 _  _ _  _ _ Nil        = showString "Nil"
+  liftShowsPrec2 sa _ sb _ d (Cons a b) = showParen (d > 10)
+    $ showString "Cons "
+    . sa 11 a
+    . showString " "
+    . sb 11 b
+
+instance Read2 ListF where
+  liftReadsPrec2 ra _ rb _ d = readParen (d > 10) $ \s -> nil s ++ cons s
+    where
+      nil s0 = do
+        ("Nil", s1) <- lex s0
+        return (Nil, s1)
+      cons s0 = do
+        ("Cons", s1) <- lex s0
+        (a,      s2) <- ra 11 s1
+        (b,      s3) <- rb 11 s2
+        return (Cons a b, s3)
+
+instance Read a => Read1 (ListF a) where
+  liftReadsPrec = liftReadsPrec2 readsPrec readList
+
+#else
+instance Eq a   => Eq1   (ListF a) where eq1        = (==)
+instance Ord a  => Ord1  (ListF a) where compare1   = compare
+instance Show a => Show1 (ListF a) where showsPrec1 = showsPrec
+instance Read a => Read1 (ListF a) where readsPrec1 = readsPrec
+#endif
+
+-- These instances cannot be auto-derived on with GHC <= 7.6
+instance Functor (ListF a) where
+  fmap _ Nil        = Nil
   fmap f (Cons a b) = Cons a (f b)
-  fmap _ Nil = Nil
 
-type instance Base [a] = Prim [a]
-instance Foldable [a] where
+instance F.Foldable (ListF a) where
+  foldMap _ Nil        = Data.Monoid.mempty
+  foldMap f (Cons _ b) = f b
+
+instance T.Traversable (ListF a) where
+  traverse _ Nil        = pure Nil
+  traverse f (Cons a b) = Cons a <$> f b
+
+instance Bi.Bifunctor ListF where
+  bimap _ _ Nil        = Nil
+  bimap f g (Cons a b) = Cons (f a) (g b)
+
+instance Bi.Bifoldable ListF where
+  bifoldMap _ _ Nil        = mempty
+  bifoldMap f g (Cons a b) = mappend (f a) (g b)
+
+instance Bi.Bitraversable ListF where
+  bitraverse _ _ Nil        = pure Nil
+  bitraverse f g (Cons a b) = Cons <$> f a <*> g b
+
+type instance Base [a] = ListF a
+instance Recursive [a] where
   project (x:xs) = Cons x xs
   project [] = Nil
 
   para f (x:xs) = f (Cons x (xs, para f xs))
   para f [] = f Nil
 
-instance Unfoldable [a] where
+instance Corecursive [a] where
   embed (Cons x xs) = x:xs
   embed Nil = []
 
@@ -205,17 +321,17 @@
 
 -- | Example boring stub for non-recursive data types
 type instance Base (Maybe a) = Const (Maybe a)
-instance Foldable (Maybe a) where project = Const
-instance Unfoldable (Maybe a) where embed = getConst
+instance Recursive (Maybe a) where project = Const
+instance Corecursive (Maybe a) where embed = getConst
 
 -- | Example boring stub for non-recursive data types
 type instance Base (Either a b) = Const (Either a b)
-instance Foldable (Either a b) where project = Const
-instance Unfoldable (Either a b) where embed = getConst
+instance Recursive (Either a b) where project = Const
+instance Corecursive (Either a b) where embed = getConst
 
 -- | A generalized catamorphism
 gfold, gcata
-  :: (Foldable t, Comonad w)
+  :: (Recursive t, Comonad w)
   => (forall b. Base t (w b) -> w (Base t b)) -- ^ a distributive law
   -> (Base t (w a) -> a)                      -- ^ a (Base t)-w-algebra
   -> t                                        -- ^ fixed point
@@ -229,7 +345,7 @@
 
 -- | A generalized anamorphism
 gunfold, gana
-  :: (Unfoldable t, Monad m)
+  :: (Corecursive t, Monad m)
   => (forall b. m (Base t b) -> Base t (m b)) -- ^ a distributive law
   -> (a -> Base t (m a))                      -- ^ a (Base t)-m-coalgebra
   -> a                                        -- ^ seed
@@ -254,7 +370,7 @@
   h = fmap f . w . fmap (duplicate . h . join) . m . liftM g
 grefold w m f g a = ghylo w m f g a
 
-futu :: Unfoldable t => (a -> Base t (Free (Base t) a)) -> a -> t
+futu :: Corecursive t => (a -> Base t (Free (Base t) a)) -> a -> t
 futu = gana distFutu
 
 distFutu :: Functor f => Free f (f a) -> f (Free f a)
@@ -264,19 +380,36 @@
 distGFutu _ (Pure fa) = Pure <$> fa
 distGFutu k (Free as) = Free <$> k (distGFutu k <$> as)
 
+-------------------------------------------------------------------------------
+-- Fix
+-------------------------------------------------------------------------------
+
 newtype Fix f = Fix (f (Fix f))
 
 unfix :: Fix f -> f (Fix f)
 unfix (Fix f) = f
 
-deriving instance Eq (f (Fix f)) => Eq (Fix f)
-deriving instance Ord (f (Fix f)) => Ord (Fix f)
-deriving instance Show (f (Fix f)) => Show (Fix f)
-deriving instance Read (f (Fix f)) => Read (Fix f)
+instance Eq1 f => Eq (Fix f) where
+  Fix a == Fix b = eq1 a b
+
+instance Ord1 f => Ord (Fix f) where
+  compare (Fix a) (Fix b) = compare1 a b
+
+instance Show1 f => Show (Fix f) where
+  showsPrec d (Fix a) =
+    showParen (d >= 11)
+      $ showString "Fix "
+      . showsPrec1 11 a
+
+instance Read1 f => Read (Fix f) where
+  readPrec = parens $ prec 10 $ do
+    Ident "Fix" <- lexP
+    Fix <$> step (readS_to_Prec readsPrec1)
 
 #ifdef __GLASGOW_HASKELL__
-#if MIN_VERSION_base(4,7,0)
+#if HAS_POLY_TYPEABLE
 deriving instance Typeable Fix
+deriving instance (Typeable f, Data (f (Fix f))) => Data (Fix f)
 #else
 instance Typeable1 f => Typeable (Fix f) where
    typeOf t = mkTyConApp fixTyCon [typeOf1 (undefined `asArgsTypeOf` t)]
@@ -284,9 +417,6 @@
            asArgsTypeOf = const
 
 fixTyCon :: TyCon
-#endif
-#if MIN_VERSION_base(4,7,0)
-#else
 #if MIN_VERSION_base(4,4,0)
 fixTyCon = mkTyCon3 "recursion-schemes" "Data.Functor.Foldable" "Fix"
 #else
@@ -311,48 +441,52 @@
 #endif
 
 type instance Base (Fix f) = f
-instance Functor f => Foldable (Fix f) where
+instance Functor f => Recursive (Fix f) where
   project (Fix a) = a
-instance Functor f => Unfoldable (Fix f) where
+instance Functor f => Corecursive (Fix f) where
   embed = Fix
 
-refix :: (Foldable s, Unfoldable t, Base s ~ Base t) => s -> t
+refix :: (Recursive s, Corecursive t, Base s ~ Base t) => s -> t
 refix = cata embed
 
-toFix :: Foldable t => t -> Fix (Base t)
+toFix :: Recursive t => t -> Fix (Base t)
 toFix = refix
 
-fromFix :: Unfoldable t => Fix (Base t) -> t
+fromFix :: Corecursive t => Fix (Base t) -> t
 fromFix = refix
 
+-------------------------------------------------------------------------------
+-- Lambek
+-------------------------------------------------------------------------------
+
 -- | Lambek's lemma provides a default definition for 'project' in terms of 
'cata' and 'embed'
-lambek :: (Foldable t, Unfoldable t) => (t -> Base t t)
+lambek :: (Recursive t, Corecursive t) => (t -> Base t t)
 lambek = cata (fmap embed)
 
 -- | The dual of Lambek's lemma, provides a default definition for 'embed' in 
terms of 'ana' and 'project'
-colambek :: (Foldable t, Unfoldable t) => (Base t t -> t)
+colambek :: (Recursive t, Corecursive t) => (Base t t -> t)
 colambek = ana (fmap project)
 
 newtype Mu f = Mu (forall a. (f a -> a) -> a)
 type instance Base (Mu f) = f
-instance Functor f => Foldable (Mu f) where
+instance Functor f => Recursive (Mu f) where
   project = lambek
   cata f (Mu g) = g f
-instance Functor f => Unfoldable (Mu f) where
+instance Functor f => Corecursive (Mu f) where
   embed m = Mu (\f -> f (fmap (fold f) m))
 
-instance (Functor f, Eq (f (Fix f)), Eq (Fix f)) => Eq (Mu f) where
+instance (Functor f, Eq1 f) => Eq (Mu f) where
   (==) = (==) `on` toFix
 
-instance (Functor f, Ord (f (Fix f)), Ord (Fix f)) => Ord (Mu f) where
+instance (Functor f, Ord1 f) => Ord (Mu f) where
   compare = compare `on` toFix
 
-instance (Functor f, Show (f (Fix f)), Show (Fix f)) => Show (Mu f) where
+instance (Functor f, Show1 f) => Show (Mu f) where
   showsPrec d f = showParen (d > 10) $
     showString "fromFix " . showsPrec 11 (toFix f)
 
 #ifdef __GLASGOW_HASKELL__
-instance (Functor f, Read (f (Fix f)), Read (Fix f)) => Read (Mu f) where
+instance (Functor f, Read1 f) => Read (Mu f) where
   readPrec = parens $ prec 10 $ do
     Ident "fromFix" <- lexP
     fromFix <$> step readPrec
@@ -360,30 +494,30 @@
 
 data Nu f where Nu :: (a -> f a) -> a -> Nu f
 type instance Base (Nu f) = f
-instance Functor f => Unfoldable (Nu f) where
+instance Functor f => Corecursive (Nu f) where
   embed = colambek
   ana = Nu
-instance Functor f => Foldable (Nu f) where
+instance Functor f => Recursive (Nu f) where
   project (Nu f a) = Nu f <$> f a
 
-instance (Functor f, Eq (f (Fix f)), Eq (Fix f)) => Eq (Nu f) where
+instance (Functor f, Eq1 f) => Eq (Nu f) where
   (==) = (==) `on` toFix
 
-instance (Functor f, Ord (f (Fix f)), Ord (Fix f)) => Ord (Nu f) where
+instance (Functor f, Ord1 f) => Ord (Nu f) where
   compare = compare `on` toFix
 
-instance (Functor f, Show (f (Fix f)), Show (Fix f)) => Show (Nu f) where
+instance (Functor f, Show1 f) => Show (Nu f) where
   showsPrec d f = showParen (d > 10) $
     showString "fromFix " . showsPrec 11 (toFix f)
 
 #ifdef __GLASGOW_HASKELL__
-instance (Functor f, Read (f (Fix f)), Read (Fix f)) => Read (Nu f) where
+instance (Functor f, Read1 f) => Read (Nu f) where
   readPrec = parens $ prec 10 $ do
     Ident "fromFix" <- lexP
     fromFix <$> step readPrec
 #endif
 
-zygo :: Foldable t => (Base t b -> b) -> (Base t (b, a) -> a) -> t -> a
+zygo :: Recursive t => (Base t b -> b) -> (Base t (b, a) -> a) -> t -> a
 zygo f = gfold (distZygo f)
 
 distZygo
@@ -393,7 +527,7 @@
 distZygo g m = (g (fmap fst m), fmap snd m)
 
 gzygo
-  :: (Foldable t, Comonad w)
+  :: (Recursive t, Comonad w)
   => (Base t b -> b)
   -> (forall c. Base t (w c) -> w (Base t c))
   -> (Base t (EnvT b w a) -> a)
@@ -409,20 +543,28 @@
 distZygoT g k fe = EnvT (g (getEnv <$> fe)) (k (lower <$> fe))
   where getEnv (EnvT e _) = e
 
-gapo :: Unfoldable t => (b -> Base t b) -> (a -> Base t (Either b a)) -> a -> t
+gapo :: Corecursive t => (b -> Base t b) -> (a -> Base t (Either b a)) -> a -> 
t
 gapo g = gunfold (distGApo g)
 
-distApo :: Foldable t => Either t (Base t a) -> Base t (Either t a)
+distApo :: Recursive t => Either t (Base t a) -> Base t (Either t a)
 distApo = distGApo project
 
 distGApo :: Functor f => (b -> f b) -> Either b (f a) -> f (Either b a)
 distGApo f = either (fmap Left . f) (fmap Right)
 
+distGApoT
+  :: (Functor f, Functor m)
+  => (b -> f b)
+  -> (forall c. m (f c) -> f (m c))
+  -> ExceptT b m (f a)
+  -> f (ExceptT b m a)
+distGApoT g k = fmap ExceptT . k . fmap (distGApo g) . runExceptT
+
 -- | Course-of-value iteration
-histo :: Foldable t => (Base t (Cofree (Base t) a) -> a) -> t -> a
+histo :: Recursive t => (Base t (Cofree (Base t) a) -> a) -> t -> a
 histo = gcata distHisto
 
-ghisto :: (Foldable t, Functor h) => (forall b. Base t (h b) -> h (Base t b)) 
-> (Base t (Cofree h a) -> a) -> t -> a
+ghisto :: (Recursive t, Functor h) => (forall b. Base t (h b) -> h (Base t b)) 
-> (Base t (Cofree h a) -> a) -> t -> a
 ghisto g = gcata (distGHisto g)
 
 distHisto :: Functor f => f (Cofree f a) -> Cofree f (f a)
@@ -431,8 +573,15 @@
 distGHisto :: (Functor f, Functor h) => (forall b. f (h b) -> h (f b)) -> f 
(Cofree h a) -> Cofree h (f a)
 distGHisto k = Cofree.unfold (\as -> (extract <$> as, k (Cofree.unwrap <$> 
as)))
 
--- TODO: futu & chrono, these require Free monads
--- TODO: distGApoT, requires EitherT
+chrono :: Functor f => (f (Cofree f b) -> b) -> (a -> f (Free f a)) -> (a -> b)
+chrono = ghylo distHisto distFutu
+
+gchrono :: (Functor f, Functor w, Functor m) =>
+           (forall c. f (w c) -> w (f c)) ->
+           (forall c. m (f c) -> f (m c)) ->
+           (f (Cofree w b) -> b) -> (a -> f (Free m a)) ->
+           (a -> b)
+gchrono w m = ghylo (distGHisto w) (distGFutu m)
 
 -- | Mendler-style iteration
 mcata :: (forall y. (y -> c) -> f y -> c) -> Fix f -> c
@@ -454,10 +603,25 @@
 --
 -- A corrected and modernized version of 
<http://www.haskell.org/haskellwiki/Zygohistomorphic_prepromorphisms>
 zygoHistoPrepro
-  :: (Unfoldable t, Foldable t)
+  :: (Corecursive t, Recursive t)
   => (Base t b -> b)
   -> (forall c. Base t c -> Base t c)
   -> (Base t (EnvT b (Cofree (Base t)) a) -> a)
   -> t
   -> a
 zygoHistoPrepro f g t = gprepro (distZygoT f distHisto) g t
+
+-------------------------------------------------------------------------------
+-- Not exposed anywhere
+-------------------------------------------------------------------------------
+
+-- | Read a list (using square brackets and commas), given a function
+-- for reading elements.
+_readListWith :: ReadS a -> ReadS [a]
+_readListWith rp =
+    readParen False (\r -> [pr | ("[",s) <- lex r, pr <- readl s])
+  where
+    readl s = [([],t) | ("]",t) <- lex s] ++
+        [(x:xs,u) | (x,t) <- rp s, (xs,u) <- readl' t]
+    readl' s = [([],t) | ("]",t) <- lex s] ++
+        [(x:xs,v) | (",",t) <- lex s, (x,u) <- rp t, (xs,v) <- readl' u]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/recursion-schemes-4.1.2/LICENSE 
new/recursion-schemes-5/LICENSE
--- old/recursion-schemes-4.1.2/LICENSE 2015-06-03 11:41:44.000000000 +0200
+++ new/recursion-schemes-5/LICENSE     2016-09-14 23:39:23.000000000 +0200
@@ -1,4 +1,4 @@
-Copyright 2011-2013 Edward Kmett
+Copyright 2011-2015 Edward Kmett
 
 All rights reserved.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/recursion-schemes-4.1.2/README.markdown 
new/recursion-schemes-5/README.markdown
--- old/recursion-schemes-4.1.2/README.markdown 1970-01-01 01:00:00.000000000 
+0100
+++ new/recursion-schemes-5/README.markdown     2016-09-14 23:39:23.000000000 
+0200
@@ -0,0 +1,15 @@
+recursion-schemes
+==========
+
+[![Hackage](https://img.shields.io/hackage/v/recursion-schemes.svg)](https://hackage.haskell.org/package/recursion-schemes)
 [![Build 
Status](https://secure.travis-ci.org/ekmett/recursion-schemes.png?branch=master)](http://travis-ci.org/ekmett/recursion-schemes)
+
+This package includes code for functional programming with bananas, envelopes, 
lenses, barbed wire and all that.
+
+Contact Information
+-------------------
+
+Contributions and bug reports are welcome!
+
+Please feel free to contact me through github or on the #haskell IRC channel 
on irc.freenode.net.
+
+-Edward Kmett
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/recursion-schemes-4.1.2/recursion-schemes.cabal 
new/recursion-schemes-5/recursion-schemes.cabal
--- old/recursion-schemes-4.1.2/recursion-schemes.cabal 2015-06-03 
11:41:44.000000000 +0200
+++ new/recursion-schemes-5/recursion-schemes.cabal     2016-09-14 
23:39:23.000000000 +0200
@@ -1,6 +1,6 @@
 name:          recursion-schemes
 category:      Control, Recursion
-version:       4.1.2
+version:       5
 license:       BSD3
 cabal-version: >= 1.6
 license-file:  LICENSE
@@ -9,12 +9,14 @@
 stability:     provisional
 homepage:      http://github.com/ekmett/recursion-schemes/
 bug-reports:   http://github.com/ekmett/recursion-schemes/issues
-copyright:     Copyright (C) 2008-2013 Edward A. Kmett
+copyright:     Copyright (C) 2008-2015 Edward A. Kmett
 synopsis:      Generalized bananas, lenses and barbed wire
 description:   Generalized bananas, lenses and barbed wire
 
+tested-with:   GHC==7.4.2, GHC==7.6.3, GHC==7.8.4, GHC==7.10.3, GHC==8.0.1
+
 build-type:    Simple
-extra-source-files: .travis.yml CHANGELOG.markdown
+extra-source-files: .travis.yml CHANGELOG.markdown .gitignore README.markdown
 
 source-repository head
   type: git
@@ -33,9 +35,14 @@
 
   build-depends:
     base                 >= 4   && < 5,
-    comonad              >= 4   && < 5,
+    bifunctors           >= 4   && < 6,
+    comonad              >= 4   && < 6,
     free                 >= 4   && < 5,
-    transformers         >= 0.2 && < 1
+    transformers         >= 0.2 && < 1,
+    transformers-compat  >= 0.3 && < 1
+
+  if impl(ghc < 7.5)
+    build-depends: ghc-prim
 
   exposed-modules:
     Data.Functor.Foldable


Reply via email to