summaryrefslogtreecommitdiff
path: root/src/Erebos/Set.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Erebos/Set.hs')
-rw-r--r--src/Erebos/Set.hs8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/Erebos/Set.hs b/src/Erebos/Set.hs
index 0abe02d..c5edd56 100644
--- a/src/Erebos/Set.hs
+++ b/src/Erebos/Set.hs
@@ -4,6 +4,7 @@ module Erebos.Set (
emptySet,
loadSet,
storeSetAdd,
+ storeSetAddComponent,
fromSetBy,
) where
@@ -23,6 +24,7 @@ import Erebos.Storage.Merge
import Erebos.Util
data Set a = Set [Stored (SetItem (Component a))]
+ deriving (Eq)
data SetItem a = SetItem
{ siPrev :: [Stored (SetItem a)]
@@ -56,6 +58,12 @@ storeSetAdd st x (Set prev) = Set . (:[]) <$> wrappedStore st SetItem
, siItem = toComponents x
}
+storeSetAddComponent :: (Mergeable a, MonadStorage m, MonadIO m) => Stored (Component a) -> Set a -> m (Set a)
+storeSetAddComponent component (Set prev) = Set . (:[]) <$> mstore SetItem
+ { siPrev = prev
+ , siItem = [ component ]
+ }
+
fromSetBy :: forall a. Mergeable a => (a -> a -> Ordering) -> Set a -> [a]
fromSetBy cmp (Set heads) = sortBy cmp $ map merge $ groupRelated items