commit 11b20c31df8d2175b81403b0cf5fd71eb622155b
parent 8548b662de8c4edbeef575b470d656a8251acc43
Author: Robert Russell <robert@rr3.xyz>
Date: Wed, 14 Oct 2026 21:14:06 -0700
Equivalence, Order: add numeric instances
Diffstat:
5 files changed, 25 insertions(+), 0 deletions(-)
diff --git a/src/Lude/Equivalence.hs b/src/Lude/Equivalence.hs
@@ -8,6 +8,7 @@ module Lude.Equivalence (
) where
import Data.Coerce
+import Numeric.Natural qualified as Base
import Prelude qualified as Base
import Lude.Bool
@@ -83,3 +84,6 @@ instance (Base.Eq a) => Equivalential (BaseInterop a) where
ne = coerce (Base./=)
deriving via BaseInterop Base.Ordering instance Equivalential Base.Ordering
+deriving via BaseInterop Base.Natural instance Equivalential Base.Natural
+deriving via BaseInterop Base.Integer instance Equivalential Base.Integer
+deriving via BaseInterop Base.Rational instance Equivalential Base.Rational
diff --git a/src/Lude/Order/Bound.hs b/src/Lude/Order/Bound.hs
@@ -5,6 +5,7 @@ module Lude.Order.Bound (
) where
import Data.Coerce
+import Numeric.Natural qualified as Base
import Prelude qualified as Base
import Lude.Haskell
@@ -29,3 +30,5 @@ instance (BoundedBelow a, BoundedAbove a) => Bounded a
instance (Base.Ord a, Base.Bounded a) => BoundedBelow (BaseInterop a) where bot = coerce Base.minBound
instance (Base.Ord a, Base.Bounded a) => BoundedAbove (BaseInterop a) where top = coerce Base.maxBound
+
+instance BoundedBelow Base.Natural where bot = 0 where fromInteger = Base.fromInteger
diff --git a/src/Lude/Order/Lattice.hs b/src/Lude/Order/Lattice.hs
@@ -8,6 +8,7 @@ module Lude.Order.Lattice (
) where
import Data.Coerce
+import Numeric.Natural qualified as Base
import Prelude qualified as Base
import Lude.Haskell
@@ -47,3 +48,10 @@ instance (BoundedGlbLatticed a, BoundedLubLatticed a) => BoundedLatticed a
instance (Base.Ord a) => GlbLatticed (BaseInterop a) where glb = coerce Base.min
instance (Base.Ord a) => LubLatticed (BaseInterop a) where lub = coerce Base.max
+
+deriving via BaseInterop Base.Natural instance GlbLatticed Base.Natural
+deriving via BaseInterop Base.Natural instance LubLatticed Base.Natural
+deriving via BaseInterop Base.Integer instance GlbLatticed Base.Integer
+deriving via BaseInterop Base.Integer instance LubLatticed Base.Integer
+deriving via BaseInterop Base.Rational instance GlbLatticed Base.Rational
+deriving via BaseInterop Base.Rational instance LubLatticed Base.Rational
diff --git a/src/Lude/Order/Partial.hs b/src/Lude/Order/Partial.hs
@@ -14,6 +14,7 @@ module Lude.Order.Partial (
) where
import Data.Coerce
+import Numeric.Natural qualified as Base
import Prelude qualified as Base
import Lude.Bool
@@ -70,3 +71,7 @@ instance (Base.Ord a) => PartiallyOrdered (BaseInterop a) where
le = coerce (Base.<=)
ge = coerce (Base.>=)
gt = coerce (Base.>)
+
+deriving via BaseInterop Base.Natural instance PartiallyOrdered Base.Natural
+deriving via BaseInterop Base.Integer instance PartiallyOrdered Base.Integer
+deriving via BaseInterop Base.Rational instance PartiallyOrdered Base.Rational
diff --git a/src/Lude/Order/Total.hs b/src/Lude/Order/Total.hs
@@ -16,6 +16,7 @@ module Lude.Order.Total (
) where
import Data.Coerce
+import Numeric.Natural qualified as Base
import Prelude qualified as Base
import Lude.Equivalence
@@ -44,3 +45,7 @@ max = lub
instance (Base.Ord a) => TotallyOrdered (BaseInterop a) where
cmp = coerce Base.compare
+
+deriving via BaseInterop Base.Natural instance TotallyOrdered Base.Natural
+deriving via BaseInterop Base.Integer instance TotallyOrdered Base.Integer
+deriving via BaseInterop Base.Rational instance TotallyOrdered Base.Rational