packages feed

kan-extensions 5.0.1 → 5.0.2

raw patch · 7 files changed

+93/−14 lines, 7 filesdep +failPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: fail

API changes (from Hackage documentation)

- Control.Comonad.Density: Density :: (k b -> a) -> k b -> Density k a
- Data.Functor.Contravariant.Coyoneda: Coyoneda :: (a -> b) -> f b -> Coyoneda f a
- Data.Functor.Coyoneda: Coyoneda :: (b -> a) -> f b -> Coyoneda f a
- Data.Functor.Coyoneda: instance (GHC.Base.Functor f, GHC.Read.Read (f a)) => GHC.Read.Read (Data.Functor.Coyoneda.Coyoneda f a)
- Data.Functor.Kan.Lan: Lan :: (g b -> a) -> h b -> Lan g h a
+ Control.Comonad.Density: [Density] :: (k b -> a) -> k b -> Density k a
+ Control.Monad.Co: instance (Control.Comonad.Comonad w, Control.Monad.Fail.MonadFail m) => Control.Monad.Fail.MonadFail (Control.Monad.Co.CoT w m)
+ Control.Monad.Codensity: instance Control.Monad.Fail.MonadFail f => Control.Monad.Fail.MonadFail (Control.Monad.Codensity.Codensity f)
+ Data.Functor.Contravariant.Coyoneda: [Coyoneda] :: (a -> b) -> f b -> Coyoneda f a
+ Data.Functor.Coyoneda: [Coyoneda] :: (b -> a) -> f b -> Coyoneda f a
+ Data.Functor.Coyoneda: hoistCoyoneda :: (forall a. f a -> g a) -> (Coyoneda f b -> Coyoneda g b)
+ Data.Functor.Coyoneda: instance GHC.Read.Read (f a) => GHC.Read.Read (Data.Functor.Coyoneda.Coyoneda f a)
+ Data.Functor.Day: instance (Control.Comonad.Comonad f, Control.Comonad.Comonad g) => Control.Comonad.Comonad (Data.Functor.Day.Day f g)
+ Data.Functor.Day: instance (Control.Comonad.ComonadApply f, Control.Comonad.ComonadApply g) => Control.Comonad.ComonadApply (Data.Functor.Day.Day f g)
+ Data.Functor.Day: instance Control.Comonad.Comonad f => Control.Comonad.Trans.Class.ComonadTrans (Data.Functor.Day.Day f)
+ Data.Functor.Kan.Lan: [Lan] :: (g b -> a) -> h b -> Lan g h a

Files

.travis.yml view
@@ -25,13 +25,22 @@     - env: CABALVER=1.22 GHCVER=7.10.1       compiler: ": #GHC 7.10.1"       addons: {apt: {packages: [cabal-install-1.22,ghc-7.10.1,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}-    - env: CABALVER=1.22 GHCVER=7.10.2-      compiler: ": #GHC 7.10.2"-      addons: {apt: {packages: [cabal-install-1.22,ghc-7.10.2,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}-    - env: CABALVER=1.24 GHCVER=8.0.1-      compiler: ": #GHC 8.0.1"-      addons: {apt: {packages: [cabal-install-1.24,ghc-8.0.1,alex-3.1.4,happy-1.19.5], 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,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}+    - env: CABALVER=1.24 GHCVER=8.0.2+      compiler: ": #GHC 8.0.2"+      addons: {apt: {packages: [cabal-install-1.24,ghc-8.0.2,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}+    - env: CABALVER=2.0 GHCVER=8.2.1+      compiler: ": #GHC 8.2.1"+      addons: {apt: {packages: [cabal-install-2.0,ghc-8.2.1,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}}+    - env: CABALVER=head GHCVER=head+      compiler: ": #GHC head"+      addons: {apt: {packages: [cabal-install-head,ghc-head,alex-3.1.4,happy-1.19.5], sources: [hvr-ghc]}} +  allow_failures:+  - env: CABALVER=head GHCVER=head+ before_install:  - unset CC  - export HAPPYVER=1.19.5@@ -63,7 +72,6 @@      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;-     if [ "$GHCVER" = "7.10.1" ]; then cabal install Cabal-1.22.4.0; fi;    fi  # snapshot package-db on cache miss
CHANGELOG.markdown view
@@ -1,3 +1,7 @@+5.0.2+-----+* Added `hoistCoyoneda`+ 5.0.1 ----- * Removed some redundant constraints
kan-extensions.cabal view
@@ -1,6 +1,6 @@ name:          kan-extensions category:      Data Structures, Monads, Comonads, Functors-version:       5.0.1+version:       5.0.2 license:       BSD3 cabal-version: >= 1.6 license-file:  LICENSE@@ -47,6 +47,7 @@     containers    >= 0.4     && < 0.6,     contravariant >= 1       && < 2,     distributive  >= 0.2.2   && < 1,+    fail          >= 4.9     && < 5,     free          >= 4       && < 5,     mtl           >= 2.0.1   && < 2.3,     semigroupoids >= 4       && < 6,
src/Control/Monad/Co.hs view
@@ -64,6 +64,7 @@ import Control.Comonad.Store.Class import Control.Comonad.Traced.Class as Traced import Control.Monad.Error.Class+import qualified Control.Monad.Fail as Fail import Control.Monad.IO.Class import Control.Monad.Identity import Control.Monad.Reader.Class as Reader@@ -103,6 +104,9 @@ instance Comonad w => Monad (CoT w m) where   return = pure   CoT k >>= f = CoT (k . extend (\wa a -> runCoT (f a) wa))++instance (Comonad w, Fail.MonadFail m) => Fail.MonadFail (CoT w m) where+  fail msg = CoT $ \ _ -> Fail.fail msg  instance Comonad w => MonadTrans (CoT w) where   lift m = CoT (extract . fmap (m >>=))
src/Control/Monad/Codensity.hs view
@@ -32,6 +32,7 @@  import Control.Applicative import Control.Monad (MonadPlus(..))+import qualified Control.Monad.Fail as Fail import Control.Monad.Free import Control.Monad.IO.Class import Control.Monad.Reader.Class@@ -83,6 +84,10 @@   {-# INLINE return #-}   m >>= k = Codensity (\c -> runCodensity m (\a -> runCodensity (k a) c))   {-# INLINE (>>=) #-}++instance (Fail.MonadFail f) => Fail.MonadFail (Codensity f) where+  fail msg = Codensity $ \ _ -> Fail.fail msg+  {-# INLINE fail #-}  instance MonadIO m => MonadIO (Codensity m) where   liftIO = lift . liftIO
src/Data/Functor/Coyoneda.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE GADTs #-}+{-# LANGUAGE RankNTypes #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE UndecidableInstances #-}@@ -23,12 +24,12 @@ ---------------------------------------------------------------------------- module Data.Functor.Coyoneda   ( Coyoneda(..)-  , liftCoyoneda, lowerCoyoneda, lowerM+  , liftCoyoneda, lowerCoyoneda, lowerM, hoistCoyoneda   -- * as a Left Kan extension   , coyonedaToLan, lanToCoyoneda   ) where -import Control.Applicative+import Control.Applicative as A import Control.Monad (MonadPlus(..), liftM) import Control.Monad.Fix import Control.Monad.Trans.Class@@ -84,21 +85,52 @@   {-# INLINE fmap #-}  instance Apply f => Apply (Coyoneda f) where-  m <.> n = liftCoyoneda $ lowerCoyoneda m <.> lowerCoyoneda n+  Coyoneda mf m <.> Coyoneda nf n =+    liftCoyoneda $ (\mres nres -> mf mres (nf nres)) <$> m <.> n   {-# INLINE (<.>) #-}+  Coyoneda _ m .> Coyoneda g n = Coyoneda g (m .> n)+  {-# INLINE (.>) #-}+  Coyoneda f m <. Coyoneda _ n = Coyoneda f (m <. n)+  {-# INLINE (<.) #-}  instance Applicative f => Applicative (Coyoneda f) where   pure = liftCoyoneda . pure   {-# INLINE pure #-}-  m <*> n = liftCoyoneda $ lowerCoyoneda m <*> lowerCoyoneda n+  Coyoneda mf m <*> Coyoneda nf n =+    liftCoyoneda $ (\mres nres -> mf mres (nf nres)) <$> m <*> n   {-# INLINE (<*>) #-}+  Coyoneda _ m *> Coyoneda g n = Coyoneda g (m *> n)+  {-# INLINE (*>) #-}+  Coyoneda f m <* Coyoneda _ n = Coyoneda f (m <* n)+  {-# INLINE (<*) #-}  instance Alternative f => Alternative (Coyoneda f) where   empty = liftCoyoneda empty   {-# INLINE empty #-}   m <|> n = liftCoyoneda $ lowerCoyoneda m <|> lowerCoyoneda n   {-# INLINE (<|>) #-}+  some = liftCoyoneda . A.some . lowerCoyoneda+  {-# INLINE some #-}+  many = liftCoyoneda . A.many . lowerCoyoneda+  {-# INLINE many #-} +{-+-- These are slightly optimized versions of the *default*+-- `some` and `many` definitions for `Coyoneda`. I don't+-- know if it's worth the clutter to expose them.+someDefault (Coyoneda vf vb) = liftCoyoneda some_v+  where+    many_v = some_v <|> pure []+    some_v = (:) . vf <$> vb <*> many_v+{-# INLINE someDefault #-}++manyDefault (Coyoneda vf vb) = liftCoyoneda many_v+  where+    many_v = some_v <|> pure []+    some_v = (:) . vf <$> vb <*> many_v+{-# INLINE many #-}+-}+ instance Alt f => Alt (Coyoneda f) where   m <!> n = liftCoyoneda $ lowerCoyoneda m <!> lowerCoyoneda n   {-# INLINE (<!>) #-}@@ -118,6 +150,8 @@ #endif   Coyoneda f v >>= k = lift (v >>= lowerM . k . f)   {-# INLINE (>>=) #-}+  Coyoneda _ m >> Coyoneda g n = Coyoneda g (m >> n)+  {-# INLINE (>>) #-}  instance MonadTrans Coyoneda where   lift = Coyoneda id@@ -180,7 +214,7 @@   {-# INLINE showsPrec #-}  #ifdef __GLASGOW_HASKELL__-instance (Functor f, Read (f a)) => Read (Coyoneda f a) where+instance Read (f a) => Read (Coyoneda f a) where   readPrec = parens $ prec 10 $ do     Ident "liftCoyoneda" <- lexP     liftCoyoneda <$> step readPrec@@ -247,3 +281,8 @@ lowerM :: Monad f => Coyoneda f a -> f a lowerM (Coyoneda f m) = liftM f m {-# INLINE lowerM #-}++-- | Lift a natural transformation from @f@ to @g@ to a natural transformation+-- from @Coyoneda f@ to @Coyoneda g@.+hoistCoyoneda :: (forall a. f a -> g a) -> (Coyoneda f b -> Coyoneda g b)+hoistCoyoneda f (Coyoneda g x) = Coyoneda g (f x)
src/Data/Functor/Day.hs view
@@ -38,6 +38,8 @@   ) where  import Control.Applicative+import Control.Comonad+import Control.Comonad.Trans.Class import Data.Distributive import Data.Functor.Identity import Data.Functor.Rep@@ -84,12 +86,28 @@         (\(a,c) (b,d) -> u a b (v c d))  instance (Representable f, Representable g) => Distributive (Day f g) where-  distribute f = Day (tabulate id) (tabulate id) $ \x y -> fmap (\(Day m n o) -> o (index m x) (index n y)) f+  distribute f = Day (tabulate id) (tabulate id) $ \x y ->+    fmap (\(Day m n o) -> o (index m x) (index n y)) f +  collect g f = Day (tabulate id) (tabulate id) $ \x y ->+    fmap (\q -> case g q of Day m n o -> o (index m x) (index n y)) f+ instance (Representable f, Representable g) => Representable (Day f g) where   type Rep (Day f g) = (Rep f, Rep g)   tabulate f = Day (tabulate id) (tabulate id) (curry f)   index (Day m n o) (x,y) = o (index m x) (index n y)++instance (Comonad f, Comonad g) => Comonad (Day f g) where+  extract (Day fb gc bca) = bca (extract fb) (extract gc)+  duplicate (Day fb gc bca) = Day (duplicate fb) (duplicate gc) (\fb' gc' -> Day fb' gc' bca)++instance (ComonadApply f, ComonadApply g) => ComonadApply (Day f g) where+  Day fa fb u <@> Day gc gd v =+    Day ((,) <$> fa <@> gc) ((,) <$> fb <@> gd)+        (\(a,c) (b,d) -> u a b (v c d))++instance Comonad f => ComonadTrans (Day f) where+  lower (Day fb gc bca) = bca (extract fb) <$> gc  -- | Day convolution provides a monoidal product. The associativity -- of this monoid is witnessed by 'assoc' and 'disassoc'.