packages feed

contravariant 1.0 → 1.1

raw patch · 2 files changed

+62/−1 lines, 2 filesdep +semigroupsPVP ok

version bump matches the API change (PVP)

Dependencies added: semigroups

API changes (from Hackage documentation)

+ Data.Functor.Contravariant: comparisonEquivalence :: Comparison a -> Equivalence a
+ Data.Functor.Contravariant: instance [safe] Floating a => Floating (Op a b)
+ Data.Functor.Contravariant: instance [safe] Fractional a => Fractional (Op a b)
+ Data.Functor.Contravariant: instance [safe] Monoid (Comparison a)
+ Data.Functor.Contravariant: instance [safe] Monoid (Equivalence a)
+ Data.Functor.Contravariant: instance [safe] Monoid a => Monoid (Op a b)
+ Data.Functor.Contravariant: instance [safe] Num a => Num (Op a b)
+ Data.Functor.Contravariant: instance [safe] Semigroup (Comparison a)
+ Data.Functor.Contravariant: instance [safe] Semigroup (Equivalence a)
+ Data.Functor.Contravariant: instance [safe] Semigroup a => Semigroup (Op a b)

Files

Data/Functor/Contravariant.hs view
@@ -48,6 +48,7 @@   -- * Equivalence Relations   , Equivalence(..)   , defaultEquivalence+  , comparisonEquivalence    -- * Dual arrows   , Op(..)@@ -64,6 +65,8 @@ import Data.Functor.Compose import Data.Functor.Reverse +import Data.Semigroup (Semigroup(..), Monoid(..))+ #ifdef LANGUAGE_DeriveDataTypeable import Data.Typeable #endif@@ -187,6 +190,13 @@ instance Contravariant Comparison where   contramap f g = Comparison $ \a b -> getComparison g (f a) (f b) +instance Semigroup (Comparison a) where+  Comparison p <> Comparison q = Comparison $ mappend p q++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@@ -203,10 +213,20 @@ instance Contravariant Equivalence where   contramap f g = Equivalence $ \a b -> getEquivalence g (f a) (f b) +instance Semigroup (Equivalence a) where+  Equivalence p <> Equivalence q = Equivalence $ \a b -> p a b && q a b++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 '==' 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@@ -219,3 +239,43 @@  instance Contravariant (Op a) where   contramap f g = Op (getOp g . f)++instance Semigroup a => Semigroup (Op a b) where+  Op p <> Op q = Op $ \a -> p a <> q a++instance Monoid a => Monoid (Op a b) where+  mempty = Op (const mempty)+  mappend (Op p) (Op q) = Op $ \a -> mappend (p a) (q a)++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)
contravariant.cabal view
@@ -1,6 +1,6 @@ name:          contravariant category:      Control, Data-version:       1.0+version:       1.1 license:       BSD3 cabal-version: >= 1.6 license-file:  LICENSE@@ -32,6 +32,7 @@ library   build-depends:     base < 5,+    semigroups >= 0.15.2 && < 1,     transformers >= 0.2 && < 0.5,     transformers-compat >= 0.3 && < 1