Skip to content

Commit fc82039

Browse files
authored
add propagated instances (#2)
1 parent 59621fe commit fc82039

File tree

6 files changed

+25
-1
lines changed

6 files changed

+25
-1
lines changed

cabal.project

+6
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,9 @@ source-repository-package
88
location: https://github.com/chessai/semirings.git
99
tag: 2631c542b57abc9bc9e92db273ab8e80ae88048c
1010
--sha256: j/zGFd2aeowzJfgCCBmJYmG8mDsfF0irqj/cPOw9ulE=
11+
12+
source-repository-package
13+
type: git
14+
location: https://github.com/martyall/propagators.git
15+
tag: 6c1778171ee7c37ca29cf1ec4efaf79c5ec8af62
16+
--sha256: 6MUrOeUvp/iRFCTdvAyAGT2ymm5yKRqfN4GCkZ4eDyo=

galois-field.cabal

+1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ common deps
2929
, MonadRandom ^>=0.6
3030
, poly >=0.3.2 && <0.6
3131
, protolude ^>=0.3.3
32+
, propagators ^>=0.1.0
3233
, QuickCheck >=2.13 && <2.15
3334
, semirings ^>=0.7
3435
, vector ^>=0.13.0

src/Data/Field/Galois/Base.hs

+3-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ where
66
import Control.Monad.Random (Random)
77
import Data.Field (Field)
88
import Data.Group qualified as G (Group (..))
9+
import Data.Propagator (PropagatedNum)
910
import GHC.Natural (Natural)
1011
import Protolude hiding (one, quot, (-))
1112
import Test.QuickCheck (Arbitrary)
@@ -26,7 +27,8 @@ class
2627
Pretty k,
2728
Random k,
2829
Show k,
29-
NFData k
30+
NFData k,
31+
PropagatedNum k
3032
) =>
3133
GaloisField k
3234
where

src/Data/Field/Galois/Binary.hs

+5
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import Data.Euclidean as S (Euclidean (..), GcdDomain)
1313
import Data.Field (Field)
1414
import Data.Field.Galois.Base (GaloisField (..))
1515
import Data.Group (Group (..))
16+
import Data.Propagator (Propagated, PropagatedNum)
1617
import Data.Semiring (Ring (..), Semiring (..))
1718
import Data.Vector.Unboxed as V (fromList, length, toList)
1819
import GHC.Exts (IsList (..))
@@ -43,6 +44,10 @@ instance (KnownNat p) => BinaryField (Binary p) where
4344
fromB (B x) = toInteger x
4445
{-# INLINEABLE fromB #-}
4546

47+
instance Propagated (Binary p)
48+
49+
instance (KnownNat p) => PropagatedNum (Binary p)
50+
4651
-- Binary fields are Galois fields.
4752
instance (KnownNat p) => GaloisField (Binary p) where
4853
char = const 2

src/Data/Field/Galois/Extension.hs

+5
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import Data.Field.Galois.Base (GaloisField (..))
2424
import Data.Field.Galois.Frobenius (frobenius)
2525
import Data.Group (Group (..))
2626
import Data.Poly (VPoly, leading, monomial, scale, toPoly, unPoly)
27+
import Data.Propagator (Propagated, PropagatedNum)
2728
import Data.Semiring (Ring (..), Semiring (..))
2829
import GHC.Exts (IsList (..))
2930
import Protolude as P hiding (Semiring, rem, toList)
@@ -69,6 +70,10 @@ instance (IrreducibleMonic p k) => GaloisField (Extension p k) where
6970
Nothing -> pow y $ char y
7071
{-# INLINEABLE frob #-}
7172

73+
instance (IrreducibleMonic p k) => Propagated (Extension p k)
74+
75+
instance (IrreducibleMonic p k) => PropagatedNum (Extension p k)
76+
7277
{-# RULES
7378
"Extension.pow" forall (k :: (IrreducibleMonic p k) => Extension p k) n.
7479
(^) k n =

src/Data/Field/Galois/Prime.hs

+5
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import Data.Field (Field)
1212
import Data.Field.Galois.Base (GaloisField (..))
1313
import Data.Group (Group (..))
1414
import Data.Mod (Mod, unMod, (^%))
15+
import Data.Propagator (Propagated, PropagatedNum)
1516
import Data.Semiring (Ring (..), Semiring (..))
1617
import GHC.Natural (naturalToInteger)
1718
import GHC.TypeNats (natVal)
@@ -34,6 +35,10 @@ class (GaloisField k) => PrimeField k where
3435
newtype Prime (p :: Nat) = P (Mod p)
3536
deriving (Eq, Ord, Show, Generic, Num, Fractional, Euclidean, Field, GcdDomain, Ring, Semiring, Bounded, Enum, NFData)
3637

38+
instance (KnownNat p) => Propagated (Prime p)
39+
40+
instance (KnownNat p) => PropagatedNum (Prime p)
41+
3742
instance Hashable (Prime p) where
3843
hashWithSalt s (P x) = hashWithSalt s (unMod x)
3944

0 commit comments

Comments
 (0)