packages feed

algebra 0.2.0 → 0.3.0

raw patch · 2 files changed

+100/−1 lines, 2 filesdep ~base

Dependency ranges changed: base

Files

+ Numeric/Module/Class.hs view
@@ -0,0 +1,98 @@+{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances #-}+-- This package is an unfortunate ball of mud forced on me by mutual dependencies+module Numeric.Module.Class+  (  +  -- * Module over semirings+    LeftModule(..)+  , RightModule(..)+  ) where++import Data.Int+import Data.Word+import Numeric.Natural.Internal+import Numeric.Semigroup.Additive+import Numeric.Semiring.Internal+import Prelude hiding ((*))++infixl 7 .*, *.++class (Semiring r, Additive m) => LeftModule r m where+  (.*) :: r -> m -> m++instance LeftModule Natural Bool where +  0 .* _ = False+  _ .* a = a+instance LeftModule Natural Natural where (.*) = (*)+instance LeftModule Natural Integer where Natural n .* m = n * m+instance LeftModule Integer Integer where (.*) = (*) +instance LeftModule Natural Int where (.*) = (*) . fromIntegral+instance LeftModule Integer Int where (.*) = (*) . fromInteger+instance LeftModule Natural Int8 where (.*) = (*) . fromIntegral+instance LeftModule Integer Int8 where (.*) = (*) . fromInteger+instance LeftModule Natural Int16 where (.*) = (*) . fromIntegral+instance LeftModule Integer Int16 where (.*) = (*) . fromInteger+instance LeftModule Natural Int32 where (.*) = (*) . fromIntegral+instance LeftModule Integer Int32 where (.*) = (*) . fromInteger+instance LeftModule Natural Int64 where (.*) = (*) . fromIntegral+instance LeftModule Integer Int64 where (.*) = (*) . fromInteger+instance LeftModule Natural Word where (.*) = (*) . fromIntegral+instance LeftModule Integer Word where (.*) = (*) . fromInteger+instance LeftModule Natural Word8 where (.*) = (*) . fromIntegral+instance LeftModule Integer Word8 where (.*) = (*) . fromInteger+instance LeftModule Natural Word16 where (.*) = (*) . fromIntegral+instance LeftModule Integer Word16 where (.*) = (*) . fromInteger+instance LeftModule Natural Word32 where (.*) = (*) . fromIntegral+instance LeftModule Integer Word32 where (.*) = (*) . fromInteger+instance LeftModule Natural Word64 where (.*) = (*) . fromIntegral+instance LeftModule Integer Word64 where (.*) = (*) . fromInteger+instance Semiring r => LeftModule r () where _ .* _ = ()+instance LeftModule r m => LeftModule r (e -> m) where (.*) m f e = m .* f e+instance (LeftModule r a, LeftModule r b) => LeftModule r (a, b) where+  n .* (a, b) = (n .* a, n .* b)+instance (LeftModule r a, LeftModule r b, LeftModule r c) => LeftModule r (a, b, c) where+  n .* (a, b, c) = (n .* a, n .* b, n .* c)+instance (LeftModule r a, LeftModule r b, LeftModule r c, LeftModule r d) => LeftModule r (a, b, c, d) where+  n .* (a, b, c, d) = (n .* a, n .* b, n .* c, n .* d)+instance (LeftModule r a, LeftModule r b, LeftModule r c, LeftModule r d, LeftModule r e) => LeftModule r (a, b, c, d, e) where+  n .* (a, b, c, d, e) = (n .* a, n .* b, n .* c, n .* d, n .* e)++class (Semiring r, Additive m) => RightModule r m where+  (*.) :: m -> r -> m++instance RightModule Natural Bool where +  _ *. 0 = False+  a *. _ = a+instance RightModule Natural Natural where (*.) = (*)+instance RightModule Natural Integer where n *. Natural m = n * m+instance RightModule Integer Integer where (*.) = (*) +instance RightModule Natural Int where m *. n = m * fromIntegral n+instance RightModule Integer Int where m *. n = m * fromInteger n+instance RightModule Natural Int8 where m *. n = m * fromIntegral n+instance RightModule Integer Int8 where m *. n = m * fromInteger n+instance RightModule Natural Int16 where m *. n = m * fromIntegral n+instance RightModule Integer Int16 where m *. n = m * fromInteger n+instance RightModule Natural Int32 where m *. n = m * fromIntegral n+instance RightModule Integer Int32 where m *. n = m * fromInteger n+instance RightModule Natural Int64 where m *. n = m * fromIntegral n+instance RightModule Integer Int64 where m *. n = m * fromInteger n+instance RightModule Natural Word where m *. n = m * fromIntegral n+instance RightModule Integer Word where m *. n = m * fromInteger n+instance RightModule Natural Word8 where m *. n = m * fromIntegral n+instance RightModule Integer Word8 where m *. n = m * fromInteger n+instance RightModule Natural Word16 where m *. n = m * fromIntegral n+instance RightModule Integer Word16 where m *. n = m * fromInteger n+instance RightModule Natural Word32 where m *. n = m * fromIntegral n+instance RightModule Integer Word32 where m *. n = m * fromInteger n+instance RightModule Natural Word64 where m *. n = m * fromIntegral n+instance RightModule Integer Word64 where m *. n = m * fromInteger n+instance Semiring r => RightModule r () where _ *. _ = ()+instance RightModule r m => RightModule r (e -> m) where (*.) f m e = f e *. m+instance (RightModule r a, RightModule r b) => RightModule r (a, b) where+  (a, b) *. n = (a *. n, b *. n)+instance (RightModule r a, RightModule r b, RightModule r c) => RightModule r (a, b, c) where+  (a, b, c) *. n = (a *. n, b *. n, c *. n)+instance (RightModule r a, RightModule r b, RightModule r c, RightModule r d) => RightModule r (a, b, c, d) where+  (a, b, c, d) *. n = (a *. n, b *. n, c *. n, d *. n)+instance (RightModule r a, RightModule r b, RightModule r c, RightModule r d, RightModule r e) => RightModule r (a, b, c, d, e) where+  (a, b, c, d, e) *. n = (a *. n, b *. n, c *. n, d *. n, e *. n)+
algebra.cabal view
@@ -1,6 +1,6 @@ name:          algebra category:      Math, Algebra-version:       0.2.0+version:       0.3.0 license:       BSD3 cabal-version: >= 1.6 license-file:  LICENSE@@ -56,6 +56,7 @@     Numeric.Monoid.Additive     Numeric.Monoid.Multiplicative     Numeric.Log+    Numeric.Module.Class     Numeric.Multiplication     Numeric.Multiplication.Commutative     Numeric.Multiplication.Involutive