packages feed

semirings 0.2.1.0 → 0.2.1.1

raw patch · 3 files changed

+51/−9 lines, 3 filesPVP: minor bump suggested

API additions: PVP suggests at least a minor version bump

API changes (from Hackage documentation)

+ Data.Semiring: WrapNum :: a -> WrappedNum a
+ Data.Semiring: [unwrapNum] :: WrappedNum a -> a
+ Data.Semiring: instance Data.Foldable.Foldable Data.Semiring.WrappedNum
+ Data.Semiring: instance Data.Traversable.Traversable Data.Semiring.WrappedNum
+ Data.Semiring: instance Foreign.Storable.Storable a => Foreign.Storable.Storable (Data.Semiring.WrappedNum a)
+ Data.Semiring: instance GHC.Base.Functor Data.Semiring.WrappedNum
+ Data.Semiring: instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Semiring.WrappedNum a)
+ Data.Semiring: instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Semiring.WrappedNum a)
+ Data.Semiring: instance GHC.Enum.Bounded a => GHC.Enum.Bounded (Data.Semiring.WrappedNum a)
+ Data.Semiring: instance GHC.Enum.Enum a => GHC.Enum.Enum (Data.Semiring.WrappedNum a)
+ Data.Semiring: instance GHC.Generics.Generic (Data.Semiring.WrappedNum a)
+ Data.Semiring: instance GHC.Generics.Generic1 Data.Semiring.WrappedNum
+ Data.Semiring: instance GHC.Num.Num a => Data.Semiring.Ring (Data.Semiring.WrappedNum a)
+ Data.Semiring: instance GHC.Num.Num a => Data.Semiring.Semiring (Data.Semiring.WrappedNum a)
+ Data.Semiring: instance GHC.Num.Num a => GHC.Num.Num (Data.Semiring.WrappedNum a)
+ Data.Semiring: instance GHC.Read.Read a => GHC.Read.Read (Data.Semiring.WrappedNum a)
+ Data.Semiring: instance GHC.Real.Fractional a => GHC.Real.Fractional (Data.Semiring.WrappedNum a)
+ Data.Semiring: instance GHC.Real.Real a => GHC.Real.Real (Data.Semiring.WrappedNum a)
+ Data.Semiring: instance GHC.Real.RealFrac a => GHC.Real.RealFrac (Data.Semiring.WrappedNum a)
+ Data.Semiring: instance GHC.Show.Show a => GHC.Show.Show (Data.Semiring.WrappedNum a)
+ Data.Semiring: newtype WrappedNum a

Files

CHANGELOG.md view
@@ -1,3 +1,8 @@+0.2.1.1: [2018.XX.XX]+---------------------+* Fixed build on GHC-7.4+* Provide `Semiring` and `Ring` for an arbitrary `Num` via `WrappedNum` newtype.+ 0.2.1.0: [2018.09.26] --------------------- * Removed use of DefaultSignatures
Data/Semiring.hs view
@@ -35,6 +35,7 @@     -- * Types   , Add(..)   , Mul(..)+  , WrappedNum(..)      -- * Ring typeclass    , Ring(..)@@ -46,13 +47,13 @@ import           Data.Bool (Bool(..), (||), (&&), otherwise, not) import           Data.Complex (Complex(..)) import           Data.Eq (Eq(..))-import           Data.Fixed (Fixed(MkFixed), HasResolution)+import           Data.Fixed (Fixed, HasResolution) import           Data.Foldable (Foldable) import qualified Data.Foldable as Foldable import           Data.Function ((.), const, flip, id) import           Data.Functor (Functor(..)) #if MIN_VERSION_base(4,12,0)-import           Data.Functor.Contravariant (Predicate(..), Comparison(..), Equivalence(..), Op(..))+import           Data.Functor.Contravariant (Predicate(..), Equivalence(..), Op(..)) #endif import           Data.Functor.Identity (Identity(..)) #if defined(VERSION_unordered_containers)@@ -63,6 +64,7 @@ import qualified Data.HashSet as HashSet #endif import           Data.Int (Int, Int8, Int16, Int32, Int64)+import qualified Data.List as List import           Data.Maybe (Maybe(..)) #if MIN_VERSION_base(4,12,0) import           Data.Monoid (Ap(..))@@ -273,6 +275,39 @@   {-# INLINE mempty #-}   {-# INLINE mappend #-} +-- | Provide Semiring and Ring for an arbitrary Num. It is useful with GHC 8.6+'s DerivingVia extension.+newtype WrappedNum a = WrapNum { unwrapNum :: a }+  deriving+    ( Bounded+    , Enum+    , Eq+    , Foldable+    , Fractional+    , Functor+#if MIN_VERSION_base(4,6,1)+    , Generic+    , Generic1+#endif+    , Num.Num+    , Ord+    , Read+    , Real+    , RealFrac+    , Show+    , Storable+    , Traversable+    , Typeable+    )++instance Num.Num a => Semiring (WrappedNum a) where+  plus  = (Num.+)+  zero  = 0+  times = (Num.*)+  one   = 1++instance Num.Num a => Ring (WrappedNum a) where+  negate = Num.negate+ {--------------------------------------------------------------------   Classes --------------------------------------------------------------------}@@ -601,8 +636,8 @@ deriving instance Semiring a => Semiring (Max a) deriving instance Semiring a => Semiring (Min a) instance HasResolution a => Semiring (Fixed a) where-  zero  = MkFixed 0-  one   = MkFixed 1+  zero  = 0+  one   = 1   plus  = (Num.+)   times = (Num.*)   {-# INLINE zero  #-}@@ -941,10 +976,12 @@ listAdd (x:xs) (y:ys) = (x + y) : listAdd xs ys {-# NOINLINE [0] listAdd #-} -listTimes [] (_:xs) = zero : listTimes [] xs-listTimes (_:xs) [] = zero : listTimes xs []-listTimes [] [] = []-listTimes (x:xs) (y:ys) = (x * y) : listTimes xs ys+listTimes _  [] = []+listTimes xs ys = List.foldr f [] xs+  where+    f x zs = List.foldr (g x) id ys (zero : zs)+    g x y a []     = x `times` y : a []+    g x y a (z:zs) = x `times` y `plus` z : a zs {-# NOINLINE [0] listTimes #-}  type ListBuilder a = forall b. (a -> b -> b) -> b -> b
semirings.cabal view
@@ -1,6 +1,6 @@ name:          semirings category:      Algebra, Data, Data Structures, Math, Maths, Mathematics-version:       0.2.1.0+version:       0.2.1.1 license:       BSD3 cabal-version: >= 1.10 license-file:  LICENSE