lude

Haskell prelude alternative
git clone git://git.rr3.xyz/lude | git clone gits://git.rr3.xyz/lude
Log | Files | Refs | README | LICENSE

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:
Msrc/Lude/Equivalence.hs | 4++++
Msrc/Lude/Order/Bound.hs | 3+++
Msrc/Lude/Order/Lattice.hs | 8++++++++
Msrc/Lude/Order/Partial.hs | 5+++++
Msrc/Lude/Order/Total.hs | 5+++++
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