contravariant 0.6.1.1 → 1.0
raw patch · 4 files changed
+8/−368 lines, 4 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Data.Functor.Contravariant.Day: Day :: (f b) -> (g c) -> (a -> (b, c)) -> Day f g a
- Data.Functor.Contravariant.Day: assoc :: Day f (Day g h) a -> Day (Day f g) h a
- Data.Functor.Contravariant.Day: data Day f g a
- Data.Functor.Contravariant.Day: day :: f a -> g b -> Day f g (a, b)
- Data.Functor.Contravariant.Day: day1 :: Contravariant f => Day f g a -> f a
- Data.Functor.Contravariant.Day: day2 :: Contravariant g => Day f g a -> g a
- Data.Functor.Contravariant.Day: diag :: f a -> Day f f a
- Data.Functor.Contravariant.Day: disassoc :: Day (Day f g) h a -> Day f (Day g h) a
- Data.Functor.Contravariant.Day: instance (Typeable1 f, Typeable1 g) => Typeable1 (Day f g)
- Data.Functor.Contravariant.Day: instance Contravariant (Day f g)
- Data.Functor.Contravariant.Day: intro1 :: f a -> Day Proxy f a
- Data.Functor.Contravariant.Day: intro2 :: f a -> Day f Proxy a
- Data.Functor.Contravariant.Day: runDay :: (Contravariant f, Contravariant g) => Day f g a -> (f a, g a)
- Data.Functor.Contravariant.Day: swapped :: Day f g a -> Day g f a
- Data.Functor.Contravariant.Day: trans1 :: (forall x. f x -> g x) -> Day f h a -> Day g h a
- Data.Functor.Contravariant.Day: trans2 :: (forall x. g x -> h x) -> Day f g a -> Day f h a
- Data.Functor.Day: Day :: (f b) -> (g c) -> (b -> c -> a) -> Day f g a
- Data.Functor.Day: assoc :: Day f (Day g h) a -> Day (Day f g) h a
- Data.Functor.Day: dap :: Applicative f => Day f f a -> f a
- Data.Functor.Day: data Day f g a
- Data.Functor.Day: day :: f (a -> b) -> g a -> Day f g b
- Data.Functor.Day: disassoc :: Day (Day f g) h a -> Day f (Day g h) a
- Data.Functor.Day: elim1 :: Functor f => Day Identity f a -> f a
- Data.Functor.Day: elim2 :: Functor f => Day f Identity a -> f a
- Data.Functor.Day: instance (Typeable1 f, Typeable1 g) => Typeable1 (Day f g)
- Data.Functor.Day: instance Functor (Day f g)
- Data.Functor.Day: intro1 :: f a -> Day Identity f a
- Data.Functor.Day: intro2 :: f a -> Day f Identity a
- Data.Functor.Day: swapped :: Day f g a -> Day g f a
- Data.Functor.Day: trans1 :: (forall x. f x -> g x) -> Day f h a -> Day g h a
- Data.Functor.Day: trans2 :: (forall x. g x -> h x) -> Day f g a -> Day f h a
Files
- CHANGELOG.markdown +5/−0
- Data/Functor/Contravariant/Day.hs +0/−194
- Data/Functor/Day.hs +0/−169
- contravariant.cabal +3/−5
CHANGELOG.markdown view
@@ -1,3 +1,8 @@+1.0+---+* Removed `Day` convolution. The right adjoint of Day convolution is in `kan-extensions` as the right Kan lift. Moving these there to avoid forcing orphan instances. It also rather dramatically reduces the number of extensions required.+* This requires a first digit bump as it breaks several of my own packages.+ 0.6.1.1 ------- * Fixed issue with needing `KindSignatures` on older GHCs
− Data/Functor/Contravariant/Day.hs
@@ -1,194 +0,0 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE ExistentialQuantification #-}-{-# LANGUAGE Rank2Types #-}-#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 707-{-# LANGUAGE DeriveDataTypeable #-}-#endif-#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ <= 707-{-# LANGUAGE KindSignatures #-}-#endif-#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702-{-# LANGUAGE Trustworthy #-}-#endif--------------------------------------------------------------------------------- |--- Copyright : (C) 2013-2014 Edward Kmett, Gershom Bazerman and Derek Elkins--- License : BSD-style (see the file LICENSE)------ Maintainer : Edward Kmett <ekmett@gmail.com>--- Stability : provisional--- Portability : portable------ The Day convolution of two contravariant functors is a contravariant--- functor.------ <http://ncatlab.org/nlab/show/Day+convolution>-------------------------------------------------------------------------------module Data.Functor.Contravariant.Day- ( Day(..)- , day- , runDay- , assoc, disassoc- , swapped- , intro1, intro2- , day1, day2- , diag- , trans1, trans2- ) where--import Control.Applicative-import Data.Functor.Contravariant-import Data.Proxy-import Data.Tuple (swap)-#ifdef __GLASGOW_HASKELL__-import Data.Typeable-#endif---- | The Day convolution of two contravariant functors.-data Day f g a = forall b c. Day (f b) (g c) (a -> (b, c))-#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 707- deriving Typeable-#endif---- | Construct the Day convolution------ @--- 'day1' ('day' f g) = f--- 'day2' ('day' f g) = g--- @-day :: f a -> g b -> Day f g (a, b)-day fa gb = Day fa gb id--#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ < 707-instance (Typeable1 f, Typeable1 g) => Typeable1 (Day f g) where- typeOf1 tfga = mkTyConApp dayTyCon [typeOf1 (fa tfga), typeOf1 (ga tfga)]- where fa :: t f (g :: * -> *) a -> f a- fa = undefined- ga :: t (f :: * -> *) g a -> g a- ga = undefined--dayTyCon :: TyCon-#if MIN_VERSION_base(4,4,0)-dayTyCon = mkTyCon3 "contravariant" "Data.Functor.Contravariant.Day" "Day"-#else-dayTyCon = mkTyCon "Data.Functor.Contravariant.Day.Day"-#endif--#endif--instance Contravariant (Day f g) where- contramap f (Day fb gc abc) = Day fb gc (abc . f)---- | Break apart the Day convolution of two contravariant functors.-runDay :: (Contravariant f, Contravariant g) => Day f g a -> (f a, g a)-runDay (Day fb gc abc) =- ( contramap (fst . abc) fb- , contramap (snd . abc) gc- )---- | Day convolution provides a monoidal product. The associativity--- of this monoid is witnessed by 'assoc' and 'disassoc'.------ @--- 'assoc' . 'disassoc' = 'id'--- 'disassoc' . 'assoc' = 'id'--- 'contramap' f '.' 'assoc' = 'assoc' '.' 'contramap' f--- @-assoc :: Day f (Day g h) a -> Day (Day f g) h a-assoc (Day fb (Day gd he cde) abc) = Day (Day fb gd id) he $ \a ->- case cde <$> abc a of- (b, (d, e)) -> ((b, d), e)---- | Day convolution provides a monoidal product. The associativity--- of this monoid is witnessed by 'assoc' and 'disassoc'.------ @--- 'assoc' . 'disassoc' = 'id'--- 'disassoc' . 'assoc' = 'id'--- 'contramap' f '.' 'disassoc' = 'disassoc' '.' 'contramap' f--- @-disassoc :: Day (Day f g) h a -> Day f (Day g h) a-disassoc (Day (Day fd ge bde) hc abc) = Day fd (Day ge hc id) $ \a ->- case abc a of- (b, c) -> case bde b of- (d, e) -> (d, (e, c))---- | The monoid for Day convolution /in Haskell/ is symmetric.------ @--- 'contramap' f '.' 'swapped' = 'swapped' '.' 'contramap' f--- @-swapped :: Day f g a -> Day g f a-swapped (Day fb gc abc) = Day gc fb (swap . abc)---- | Proxy serves as the unit of Day convolution.------ @--- 'day1' '.' 'intro1' = 'id'--- 'contramap' f '.' 'intro1' = 'intro1' '.' 'contramap' f--- @-intro1 :: f a -> Day Proxy f a-intro1 fa = Day Proxy fa $ \a -> ((),a)---- | Proxy serves as the unit of Day convolution.------ @--- 'day2' '.' 'intro2' = 'id'--- 'contramap' f '.' 'intro2' = 'intro2' '.' 'contramap' f--- @-intro2 :: f a -> Day f Proxy a-intro2 fa = Day fa Proxy $ \a -> (a,())---- | In Haskell we can do general purpose elimination, but in a more general setting--- it is only possible to eliminate the unit.------ @--- 'day1' '.' 'intro1' = 'id'--- 'day1' = 'fst' '.' 'runDay'--- 'contramap' f '.' 'day1' = 'day1' '.' 'contramap' f--- @-day1 :: Contravariant f => Day f g a -> f a-day1 (Day fb _ abc) = contramap (fst . abc) fb---- | In Haskell we can do general purpose elimination, but in a more general setting--- it is only possible to eliminate the unit.--- @--- 'day2' '.' 'intro2' = 'id'--- 'day2' = 'snd' '.' 'runDay'--- 'contramap' f '.' 'day2' = 'day2' '.' 'contramap' f--- @-day2 :: Contravariant g => Day f g a -> g a-day2 (Day _ gc abc) = contramap (snd . abc) gc---- | Diagonalize the Day convolution:------ @--- 'day1' '.' 'diag' = 'id'--- 'day2' '.' 'diag' = 'id'--- 'runDay' '.' 'diag' = \a -> (a,a)--- 'contramap' f . 'diag' = 'diag' . 'contramap' f--- @--diag :: f a -> Day f f a-diag fa = Day fa fa $ \a -> (a,a)---- | Apply a natural transformation to the left-hand side of a Day convolution.------ This respects the naturality of the natural transformation you supplied:------ @--- 'contramap' f '.' 'trans1' fg = 'trans1' fg '.' 'contramap' f--- @-trans1 :: (forall x. f x -> g x) -> Day f h a -> Day g h a-trans1 fg (Day fb hc abc) = Day (fg fb) hc abc---- | Apply a natural transformation to the right-hand side of a Day convolution.------ This respects the naturality of the natural transformation you supplied:------ @--- 'contramap' f '.' 'trans2' fg = 'trans2' fg '.' 'contramap' f--- @-trans2 :: (forall x. g x -> h x) -> Day f g a -> Day f h a-trans2 gh (Day fb gc abc) = Day fb (gh gc) abc
− Data/Functor/Day.hs
@@ -1,169 +0,0 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE ExistentialQuantification #-}-{-# LANGUAGE KindSignatures #-}-{-# LANGUAGE DeriveDataTypeable #-}-{-# LANGUAGE RankNTypes #-}--------------------------------------------------------------------------------- |--- Copyright : (C) 2014 Edward Kmett--- License : BSD-style (see the file LICENSE)------ Maintainer : Edward Kmett <ekmett@gmail.com>--- Stability : provisional--- Portability : portable------ Eitan Chatav first introduced me to this construction------ The Day convolution of two covariant functors is a covariant functor.------ Day convolution is usually defined in terms of contravariant functors,--- however, it just needs a monoidal category, and Hask^op is also monoidal.------ Day convolution can be used to nicely describe monoidal functors as monoid--- objects w.r.t this product.------ <http://ncatlab.org/nlab/show/Day+convolution>-------------------------------------------------------------------------------module Data.Functor.Day- ( Day(..)- , day- , dap- , assoc, disassoc- , swapped- , intro1, intro2- , elim1, elim2- , trans1, trans2- ) where--import Control.Applicative-import Data.Functor.Identity-#ifdef __GLASGOW_HASKELL__-import Data.Typeable-#endif---- | The Day convolution of two covariant functors.-data Day f g a = forall b c. Day (f b) (g c) (b -> c -> a)-#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 707- deriving Typeable-#endif---- | Construct the Day convolution-day :: f (a -> b) -> g a -> Day f g b-day fa gb = Day fa gb id--#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ < 707-instance (Typeable1 f, Typeable1 g) => Typeable1 (Day f g) where- typeOf1 tfga = mkTyConApp dayTyCon [typeOf1 (fa tfga), typeOf1 (ga tfga)]- where fa :: t f (g :: * -> *) a -> f a- fa = undefined- ga :: t (f :: * -> *) g a -> g a- ga = undefined--dayTyCon :: TyCon-#if MIN_VERSION_base(4,4,0)-dayTyCon = mkTyCon3 "contravariant" "Data.Functor.Day" "Day"-#else-dayTyCon = mkTyCon "Data.Functor.Day.Day"-#endif--#endif--instance Functor (Day f g) where- fmap f (Day fb gc bca) = Day fb gc $ \b c -> f (bca b c)---- | Day convolution provides a monoidal product. The associativity--- of this monoid is witnessed by 'assoc' and 'disassoc'.------ @--- 'assoc' . 'disassoc' = 'id'--- 'disassoc' . 'assoc' = 'id'--- 'fmap' f '.' 'assoc' = 'assoc' '.' 'fmap' f--- @-assoc :: Day f (Day g h) a -> Day (Day f g) h a-assoc (Day fb (Day gd he dec) bca) = Day (Day fb gd (,)) he $- \ (b,d) e -> bca b (dec d e)---- | Day convolution provides a monoidal product. The associativity--- of this monoid is witnessed by 'assoc' and 'disassoc'.------ @--- 'assoc' . 'disassoc' = 'id'--- 'disassoc' . 'assoc' = 'id'--- 'fmap' f '.' 'disassoc' = 'disassoc' '.' 'fmap' f--- @-disassoc :: Day (Day f g) h a -> Day f (Day g h) a-disassoc (Day (Day fb gc bce) hd eda) = Day fb (Day gc hd (,)) $ \ b (c,d) ->- eda (bce b c) d---- | The monoid for 'Day' convolution on the cartesian monoidal structure is symmetric.------ @--- 'fmap' f '.' 'swapped' = 'swapped' '.' 'fmap' f--- @-swapped :: Day f g a -> Day g f a-swapped (Day fb gc abc) = Day gc fb (flip abc)---- | 'Identity' is the unit of 'Day' convolution------ @--- 'intro1' '.' 'elim1' = 'id'--- 'elim1' '.' 'intro1' = 'id'--- @-intro1 :: f a -> Day Identity f a-intro1 fa = Day (Identity ()) fa $ \_ a -> a---- | 'Identity' is the unit of 'Day' convolution------ @--- 'intro2' '.' 'elim2' = 'id'--- 'elim2' '.' 'intro2' = 'id'--- @-intro2 :: f a -> Day f Identity a-intro2 fa = Day fa (Identity ()) const---- | 'Identity' is the unit of 'Day' convolution------ @--- 'intro1' '.' 'elim1' = 'id'--- 'elim1' '.' 'intro1' = 'id'--- @-elim1 :: Functor f => Day Identity f a -> f a-elim1 (Day (Identity b) fc bca) = bca b <$> fc---- | 'Identity' is the unit of 'Day' convolution------ @--- 'intro2' '.' 'elim2' = 'id'--- 'elim2' '.' 'intro2' = 'id'--- @-elim2 :: Functor f => Day f Identity a -> f a-elim2 (Day fb (Identity c) bca) = flip bca c <$> fb---- | Collapse via a monoidal functor.------ @ --- 'dap' ('day' f g) = f '<*>' g--- @-dap :: Applicative f => Day f f a -> f a-dap (Day fb fc abc) = liftA2 abc fb fc---- | Apply a natural transformation to the left-hand side of a Day convolution.------ This respects the naturality of the natural transformation you supplied:------ @--- 'fmap' f '.' 'trans1' fg = 'trans1' fg '.' 'fmap' f--- @-trans1 :: (forall x. f x -> g x) -> Day f h a -> Day g h a-trans1 fg (Day fb hc bca) = Day (fg fb) hc bca---- | Apply a natural transformation to the right-hand side of a Day convolution.------ This respects the naturality of the natural transformation you supplied:------ @--- 'fmap' f '.' 'trans2' fg = 'trans2' fg '.' 'fmap' f--- @-trans2 :: (forall x. g x -> h x) -> Day f g a -> Day f h a-trans2 gh (Day fb gc bca) = Day fb (gh gc) bca
contravariant.cabal view
@@ -1,6 +1,6 @@ name: contravariant category: Control, Data-version: 0.6.1.1+version: 1.0 license: BSD3 cabal-version: >= 1.6 license-file: LICENSE@@ -10,8 +10,8 @@ homepage: http://github.com/ekmett/contravariant/ bug-reports: http://github.com/ekmett/contravariant/issues copyright: Copyright (C) 2007-2014 Edward A. Kmett-synopsis: Contravariant functors and Day convolution-description: Contravariant functors and Day convolution+synopsis: Contravariant functors+description: Contravariant functors build-type: Simple extra-source-files: .travis.yml@@ -44,7 +44,5 @@ exposed-modules: Data.Functor.Contravariant Data.Functor.Contravariant.Compose- Data.Functor.Contravariant.Day- Data.Functor.Day ghc-options: -Wall