contravariant 0.2.0.2 → 0.3
raw patch · 4 files changed
+44/−18 lines, 4 filesdep +transformers-compatPVP ok
version bump matches the API change (PVP)
Dependencies added: transformers-compat
API changes (from Hackage documentation)
+ Data.Functor.Contravariant: instance (Functor f, Contravariant g) => Contravariant (Compose f g)
+ Data.Functor.Contravariant: instance Contravariant f => Contravariant (Backwards f)
+ Data.Functor.Contravariant: instance Contravariant f => Contravariant (Reverse f)
+ Data.Functor.Contravariant.Compose: instance (Functor f, Functor g) => Functor (ComposeCF f g)
+ Data.Functor.Contravariant.Compose: instance (Functor f, Functor g) => Functor (ComposeFC f g)
Files
- CHANGELOG.markdown +5/−0
- Data/Functor/Contravariant.hs +24/−11
- Data/Functor/Contravariant/Compose.hs +8/−3
- contravariant.cabal +7/−4
+ CHANGELOG.markdown view
@@ -0,0 +1,5 @@+0.3+---+* Added `Backwards` and `Reverse` instances for `transformers` 0.3+* Added `instance (Functor f, Contravariant g) => Contravariant (Compose f g)`. (This is non-canonical, but is necessary to support other packages.)+* Added `Functor` instances to `ComposeFC` and `ComposeCF` for use when modeling phantom type parameters caused mixing `Functor` + `Contravariant`.
Data/Functor/Contravariant.hs view
@@ -36,9 +36,12 @@ ) where import Control.Applicative+import Control.Applicative.Backwards import Control.Category import Data.Functor.Product import Data.Functor.Constant+import Data.Functor.Compose+import Data.Functor.Reverse import Prelude hiding ((.),id) -- | Any instance should be subject to the following laws:@@ -63,6 +66,27 @@ (>$$<) = flip contramap {-# INLINE (>$$<) #-} +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 #-}+ newtype Predicate a = Predicate { getPredicate :: a -> Bool } -- | A 'Predicate' is a 'Contravariant' 'Functor', because 'contramap' can@@ -105,14 +129,3 @@ instance Contravariant (Op a) where contramap f g = Op (getOp g . f) --- | Data.Functor.Product-instance (Contravariant f, Contravariant g) => Contravariant (Product f g) where- contramap f (Pair a b) = Pair (contramap f a) (contramap f b)---- | Data.Functor.Constant-instance Contravariant (Constant a) where- contramap _ (Constant a) = Constant a---- | Control.Applicative.Const-instance Contravariant (Const a) where- contramap _ (Const a) = Const a
Data/Functor/Contravariant/Compose.hs view
@@ -9,7 +9,7 @@ -- -- Composition of contravariant functors. -module Data.Functor.Contravariant.Compose +module Data.Functor.Contravariant.Compose ( Compose(..) , ComposeFC(..) , ComposeCF(..)@@ -24,14 +24,19 @@ fmap f (Compose x) = Compose (contramap (contramap f) x) -- | Composition of covariant and contravariant functors-newtype ComposeFC f g a = ComposeFC { getComposeFC :: f (g a) } +newtype ComposeFC f g a = ComposeFC { getComposeFC :: f (g a) } instance (Functor f, Contravariant g) => Contravariant (ComposeFC f g) where contramap f (ComposeFC x) = ComposeFC (fmap (contramap f) x) +instance (Functor f, Functor g) => Functor (ComposeFC f g) where+ fmap f (ComposeFC x) = ComposeFC (fmap (fmap f) x)+ -- | Composition of contravariant and covariant functors-newtype ComposeCF f g a = ComposeCF { getComposeCF :: f (g a) } +newtype ComposeCF f g a = ComposeCF { getComposeCF :: f (g a) } instance (Contravariant f, Functor g) => Contravariant (ComposeCF f g) where contramap f (ComposeCF x) = ComposeCF (contramap (fmap f) x) +instance (Functor f, Functor g) => Functor (ComposeCF f g) where+ fmap f (ComposeCF x) = ComposeCF (fmap (fmap f) x)
contravariant.cabal view
@@ -1,6 +1,6 @@ name: contravariant category: Control, Data-version: 0.2.0.2+version: 0.3 license: BSD3 cabal-version: >= 1.6 license-file: LICENSE@@ -13,7 +13,9 @@ synopsis: Haskell 98 contravariant functors description: Haskell 98 contravariant functors build-type: Simple-extra-source-files: .travis.yml+extra-source-files:+ .travis.yml+ CHANGELOG.markdown source-repository head type: git@@ -21,8 +23,9 @@ library build-depends:- base < 5,- transformers >= 0.2 && < 0.4+ base < 5,+ transformers >= 0.2 && < 0.4,+ transformers-compat >= 0.1 && < 1 exposed-modules: Data.Functor.Contravariant Data.Functor.Contravariant.Compose