alg 0.2.2.1 → 0.2.3.0
raw patch · 3 files changed
+45/−3 lines, 3 files
Files
- Data/BitSet.hs +24/−0
- Relation/Binary/Comparison.hs +19/−2
- alg.cabal +2/−1
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