packages feed

alg 0.2.2.1 → 0.2.3.0

raw patch · 3 files changed

+45/−3 lines, 3 files

Files

Data/BitSet.hs view
@@ -1,9 +1,12 @@+{-# LANGUAGE FlexibleInstances #-}+ module Data.BitSet where  import Control.Applicative import Control.Monad (guard) import Data.Bits import Data.Maybe+import Data.Semigroup (Max (..), Min (..)) import Prelude ((==)) import qualified Prelude as Base import Util@@ -36,3 +39,24 @@  (.&?¬) :: (PartialOrd a, Bits a) => a -> a -> Maybe a a .&?¬ b = a .&¬ b <$ guard (b ≤ a)++instance Bits a => Monus (BitSet a) where monus = (.&¬)++{-+instance {-# OVERLAPPING #-} Bits a => Semigroup (Min (BitSet a)) where Min a <> Min b = Min (a .&. b)+instance {-# OVERLAPPING #-} Bits a => Semigroup (Max (BitSet a)) where Max a <> Max b = Max (a .|. b)++instance Bits a => Abelian (Min (BitSet a))+instance Bits a => Abelian (Max (BitSet a))++instance Bits a => Idempotent (Min (BitSet a))+instance Bits a => Idempotent (Max (BitSet a))++instance Bits a => Monoid (Min (BitSet a)) where+    mappend = (<>)+    mempty = Min (complement zeroBits)++instance Bits a => Monoid (Max (BitSet a)) where+    mappend = (<>)+    mempty = Max zeroBits+-}
Relation/Binary/Comparison.hs view
@@ -1,5 +1,4 @@-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE FlexibleContexts, FlexibleInstances #-}  module Relation.Binary.Comparison where @@ -14,6 +13,7 @@ import Data.Function (flip, on) import Data.Int import Data.Maybe+import Data.Monoid (Sum (..)) import Data.Ord (Ordering (..)) import Data.Word import Numeric.Natural@@ -220,3 +220,20 @@ instance PartialOrd a => PartialOrd (Maybe a) where     tryCompare = tryCompare `on` maybe (Left ()) Right instance Eq a => Eq (Maybe a)++class (Monoid a, Abelian a, PartialOrd a) => Monus a where+    monus :: a -> a -> a++deriving instance Preord (Sum Natural)+deriving instance PartialEq (Sum Natural)+deriving instance PartialOrd (Sum Natural)+deriving instance Eq (Sum Natural)+deriving instance Ord (Sum Natural)++instance Monus (Sum Natural) where+    0 `monus` _ = 0+    a `monus` 0 = a+    a `monus` b = (a Prelude.- 1) `monus` (b Prelude.- 1)++(∸) :: Monus (Sum a) => a -> a -> a+a ∸ b = getSum (Sum a `monus` Sum b)
alg.cabal view
@@ -1,5 +1,5 @@ name:                alg-version:             0.2.2.1+version:             0.2.3.0 synopsis:            Algebraic structures -- description:          license:             BSD3@@ -32,5 +32,6 @@                      , TypeOperators                      , ConstraintKinds                      , PolyKinds+                     , StandaloneDeriving                      , GeneralizedNewtypeDeriving   ghc-options:         -Wall -Wno-partial-type-signatures