lude

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

commit 5980a848fe0fecd59f92af930cc1702056fbf8c4
parent c15bc6c5431ec7c8edf018c294551f08d943a536
Author: Robert Russell <robert@rr3.xyz>
Date:   Thu, 15 Oct 2026 21:22:20 -0700

Algebra.Magma: add Text instances

Diffstat:
Msrc/Lude/Algebra/Magma.hs | 13+++++++++++++
1 file changed, 13 insertions(+), 0 deletions(-)

diff --git a/src/Lude/Algebra/Magma.hs b/src/Lude/Algebra/Magma.hs @@ -176,6 +176,8 @@ module Lude.Algebra.Magma ( ) where import Data.Coerce +import Data.Text (Text) +import Data.Text qualified as Text import Numeric.Natural (Natural) import Numeric.Natural qualified as Base import Prelude (Integer, Rational) @@ -354,6 +356,7 @@ pstripL = pcancelL Combination (\\!) = pstripL infixr 5 \\! +-- TODO: Argument order here is unintuitive. E.g., look at the Text instance. type PartiallyStrippableR = PartiallyCancellableR Combination :: AlgebraClass pstripR, (//!) :: PartialBinaryOp PartiallyStrippableR pstripR = pcancelR Combination @@ -724,6 +727,9 @@ instance (Base.Fractional a) => PartiallyCancellableR Multiplication (BaseIntero instance (Base.Fractional a) => PartiallyHasInverses Multiplication (BaseInterop a) where pinvert _ = coerce Base.recip instance (Base.Fractional a) => IsDivisionRing (BaseInterop a) +instance (Base.Semigroup a) => IsSemigroupWith Combination (BaseInterop a) where operation _ = coerce (Base.<>) +instance (Base.Monoid a) => IsMonoidWith Combination (BaseInterop a) where neutral _ = coerce Base.mempty + -------------------------------------------------------------------------------- baseDivNonZero :: forall (a :: Type). (Base.Eq a, Base.Fractional a) => a -> a -> Maybe a @@ -796,3 +802,10 @@ instance (IsGroupWith op a) => IsGroupWith op (r -> a) instance (HasCommutative op a) => HasCommutative op (r -> a) instance (IsSemiring a) => IsSemiring (r -> a) instance (IsRing a) => IsRing (r -> a) + +deriving via BaseInterop Text instance IsSemigroupWith Combination Text +instance PartiallyCancellableL Combination Text where pcancelL _ p x = Text.stripPrefix p x ?? x +instance PartiallyCancellableR Combination Text where pcancelR _ x s = Text.stripSuffix s x ?? x +deriving via BaseInterop Text instance IsMonoidWith Combination Text +instance DecidablyCancellableL Combination Text where tryCancelL# _ = coerce Text.stripPrefix +instance DecidablyCancellableR Combination Text where tryCancelR# _ = coerce Text.stripSuffix