packages feed

WeakSets 1.6.0.0 → 1.6.1.0

raw patch · 3 files changed

+86/−6 lines, 3 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ Data.Simplifiable: instance (Data.Simplifiable.GSimplifiable a, Data.Simplifiable.GSimplifiable b) => Data.Simplifiable.GSimplifiable (a GHC.Generics.:*: b)
+ Data.Simplifiable: instance (Data.Simplifiable.GSimplifiable a, Data.Simplifiable.GSimplifiable b) => Data.Simplifiable.GSimplifiable (a GHC.Generics.:+: b)
+ Data.Simplifiable: instance Data.Simplifiable.GSimplifiable GHC.Generics.U1
+ Data.Simplifiable: instance Data.Simplifiable.GSimplifiable a => Data.Simplifiable.GSimplifiable (GHC.Generics.M1 i c a)
+ Data.Simplifiable: instance Data.Simplifiable.Simplifiable ()
+ Data.Simplifiable: instance Data.Simplifiable.Simplifiable GHC.Int.Int16
+ Data.Simplifiable: instance Data.Simplifiable.Simplifiable GHC.Int.Int32
+ Data.Simplifiable: instance Data.Simplifiable.Simplifiable GHC.Int.Int64
+ Data.Simplifiable: instance Data.Simplifiable.Simplifiable GHC.Int.Int8
+ Data.Simplifiable: instance Data.Simplifiable.Simplifiable GHC.Num.Integer.Integer
+ Data.Simplifiable: instance Data.Simplifiable.Simplifiable GHC.Types.Ordering
+ Data.Simplifiable: instance Data.Simplifiable.Simplifiable GHC.Types.Word
+ Data.Simplifiable: instance Data.Simplifiable.Simplifiable GHC.Word.Word16
+ Data.Simplifiable: instance Data.Simplifiable.Simplifiable GHC.Word.Word32
+ Data.Simplifiable: instance Data.Simplifiable.Simplifiable GHC.Word.Word64
+ Data.Simplifiable: instance Data.Simplifiable.Simplifiable GHC.Word.Word8
+ Data.Simplifiable: instance Data.Simplifiable.Simplifiable a => Data.Simplifiable.GSimplifiable (GHC.Generics.K1 i a)
- Data.Simplifiable: simplify :: Simplifiable a => a -> a
+ Data.Simplifiable: simplify :: (Simplifiable a, Generic a, GSimplifiable (Rep a)) => a -> a

Files

CHANGELOG.md view
@@ -78,4 +78,8 @@ 
 # 1.6.0.0 -- 2023-11-03
 
-* Removing PureSet as they are useless. MonadPlus and MonadFail for Set. Simplifiable typeclass to remove duplicates in Set and Map.+* Removing PureSet as they are useless. MonadPlus and MonadFail for Set. Simplifiable typeclass to remove duplicates in Set and Map.
+
+# 1.6.1.0 -- 2023-11-05
+
+* Adding Generic derivation of Simplifiable typeclass.
WeakSets.cabal view
@@ -14,7 +14,7 @@ -- PVP summary:      +-+------- breaking API changes
 --                   | | +----- non-breaking API additions
 --                   | | | +--- code changes with no API change
-version:             1.6.0.0
+version:             1.6.1.0
 
 -- A short (one-line) description of the package.
 synopsis:
@@ -63,7 +63,7 @@     -- other-modules:
 
     -- LANGUAGE extensions used by modules in this package.
-    -- other-extensions:
+    other-extensions: DefaultSignatures, TypeOperators, FlexibleContexts
 
     -- Other library packages from which modules are imported.
     build-depends:    base >= 4 && < 5
src/Data/Simplifiable.hs view
@@ -1,3 +1,7 @@+{-# LANGUAGE DefaultSignatures #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE FlexibleContexts #-}
+
 {-| Module  : WeakSets
 Description : A container may be simplified internally by the call of a function 'simplify'. This is the case for 'WeakSet's
  and 'WeakMap's where duplicate elements remain in the container until the end of the lifetime of the container. Calling 'simplify' on them will remove duplicate elements.
@@ -9,6 +13,8 @@ 
 A container may be simplified internally by the call of a function 'simplify'. This is the case for 'WeakSet's
  and 'WeakMap's where duplicate elements remain in the container until the end of the lifetime of the container. Calling 'simplify' on them will remove duplicate elements.
+ 
+To derive automatically 'Simplifiable', add language extensions 'DeriveAnyClass' and 'DeriveGeneric', import  'GHC.Generics' and add 'Generic' and 'Simplifiable' to the derived typeclasses of your datatype. (For example : "data Foo a = Foo (Set a) deriving (Generic, Simplifiable)".)
 
 -}
 
@@ -22,6 +28,9 @@     import qualified        Data.WeakMap        as Map
     import                  Data.WeakMap.Safe
     import qualified        Data.List           as List
+    import                  Data.Int
+    import                  Data.Word
+    import                  GHC.Generics
     
     import                  Numeric.Natural
 
@@ -32,23 +41,89 @@         -- | A function to simplify a container recursively.
         simplify :: a -> a
         
+        default simplify :: (Generic a, GSimplifiable (Rep a)) => a -> a
+        simplify a = to $ gsimplify (from a)
+        
+    class GSimplifiable f where
+        gsimplify :: f a -> f a
+        
+    instance GSimplifiable U1 where
+        gsimplify U1 = U1
+        
+    instance (GSimplifiable a, GSimplifiable b) => GSimplifiable (a :*: b) where
+        gsimplify (a :*: b) = (gsimplify a) :*: (gsimplify b) 
+         
+    instance (GSimplifiable a, GSimplifiable b) => GSimplifiable (a :+: b) where
+        gsimplify (L1 a) = L1 $ gsimplify a
+        gsimplify (R1 b) = R1 $ gsimplify b
+        
+        
+    instance (GSimplifiable a) => GSimplifiable (M1 i c a) where
+        gsimplify (M1 a) = M1 $ gsimplify a
+
+    instance (Simplifiable a) => GSimplifiable (K1 i a) where
+        gsimplify (K1 x) = K1 $ simplify x
+       
+        
+        
+        
+        
+        
+        
     instance Simplifiable Bool where
         simplify = id
 
     instance Simplifiable Char where
         simplify = id
+        
+    instance Simplifiable Double where
+        simplify = id
 
+    instance Simplifiable Float where
+        simplify = id
+
     instance Simplifiable Int where
         simplify = id
 
+    instance Simplifiable Int8 where
+        simplify = id
+
+    instance Simplifiable Int16 where
+        simplify = id
+
+    instance Simplifiable Int32 where
+        simplify = id
+
+    instance Simplifiable Int64 where
+        simplify = id
+        
+    instance Simplifiable Integer where
+        simplify = id
+
     instance Simplifiable Natural where
         simplify = id
+        
+    instance Simplifiable Ordering where
+        simplify = id
+        
+    instance Simplifiable Word where
+        simplify = id
 
-    instance Simplifiable Float where
+    instance Simplifiable Word8 where
         simplify = id
 
-    instance Simplifiable Double where
+    instance Simplifiable Word16 where
         simplify = id
+
+    instance Simplifiable Word32 where
+        simplify = id
+
+    instance Simplifiable Word64 where
+        simplify = id
+
+    instance Simplifiable () where
+        simplify = id
+
         
     instance (Simplifiable a, Simplifiable b) => Simplifiable (a,b) where
         simplify (a,b) = (simplify a, simplify b)
@@ -76,4 +151,5 @@         
     instance (Simplifiable a, Simplifiable b) => Simplifiable (Either a b) where
         simplify (Left a) = Left $ simplify a
-        simplify (Right a) = Right $ simplify a+        simplify (Right a) = Right $ simplify a
+