@@ -5,18 +5,18 @@ import Control.Apply (class Apply)
5
5
import Control.Bind (class Bind )
6
6
import Control.Semigroupoid (class Semigroupoid )
7
7
8
- import Data.BooleanAlgebra (class BooleanAlgebra , not , (||), (&&) )
8
+ import Data.BooleanAlgebra (class BooleanAlgebra )
9
9
import Data.Bounded (class Bounded , bottom , top )
10
- import Data.BoundedOrd (class BoundedOrd )
11
- import Data.DivisionRing (class DivisionRing )
10
+ import Data.CommutativeRing (class CommutativeRing )
12
11
import Data.Eq (class Eq , (==))
12
+ import Data.EuclideanRing (class EuclideanRing , mod , degree , (/))
13
+ import Data.Field (class Field )
13
14
import Data.Foldable (class Foldable )
14
15
import Data.Functor (class Functor )
15
16
import Data.Functor.Contravariant (class Contravariant )
16
17
import Data.Functor.Invariant (class Invariant , imapF )
17
- import Data.ModuloSemiring (class ModuloSemiring , mod , (/ ))
18
+ import Data.HeytingAlgebra (class HeytingAlgebra , not , implies , tt , ff , (&&), (|| ))
18
19
import Data.Monoid (class Monoid , mempty )
19
- import Data.Num (class Num )
20
20
import Data.Ord (class Ord , compare )
21
21
import Data.Ring (class Ring , (-))
22
22
import Data.Semigroup (class Semigroup , (<>))
@@ -47,8 +47,6 @@ instance boundedConst :: Bounded a => Bounded (Const a b) where
47
47
top = Const top
48
48
bottom = Const bottom
49
49
50
- instance boundedOrdConst :: BoundedOrd a => BoundedOrd (Const a b )
51
-
52
50
instance showConst :: Show a => Show (Const a b ) where
53
51
show (Const x) = " (Const " <> show x <> " )"
54
52
@@ -70,19 +68,25 @@ instance semiringConst :: Semiring a => Semiring (Const a b) where
70
68
instance ringConst :: Ring a => Ring (Const a b ) where
71
69
sub (Const x) (Const y) = Const (x - y)
72
70
73
- instance moduloSemiringConst :: ModuloSemiring a => ModuloSemiring (Const a b ) where
71
+ instance euclideanRingConst :: EuclideanRing a => EuclideanRing (Const a b ) where
72
+ degree (Const x) = degree x
74
73
div (Const x) (Const y) = Const (x / y)
75
74
mod (Const x) (Const y) = Const (x `mod` y)
76
75
77
- instance divisionRingConst :: DivisionRing a => DivisionRing (Const a b )
76
+ instance commutativeRingConst :: CommutativeRing a => CommutativeRing (Const a b )
78
77
79
- instance numConst :: Num a => Num (Const a b )
78
+ instance fieldConst :: Field a => Field (Const a b )
80
79
81
- instance booleanAlgebraConst :: BooleanAlgebra a => BooleanAlgebra (Const a b ) where
80
+ instance heytingAlgebraConst :: HeytingAlgebra a => HeytingAlgebra (Const a b ) where
81
+ ff = Const ff
82
+ tt = Const tt
83
+ implies (Const x) (Const y) = Const (x `implies` y)
82
84
conj (Const x) (Const y) = Const (x && y)
83
85
disj (Const x) (Const y) = Const (x || y)
84
86
not (Const x) = Const (not x)
85
87
88
+ instance booleanAlgebraConst :: BooleanAlgebra a => BooleanAlgebra (Const a b )
89
+
86
90
instance functorConst :: Functor (Const a ) where
87
91
map _ (Const x) = Const x
88
92
0 commit comments