From 84d7c83bc85ff0862a39d6de3bd227550175ebce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Sun, 2 Feb 2020 21:03:02 +0100 Subject: Direct messages in shared state --- src/Storage/Merge.hs | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/Storage') diff --git a/src/Storage/Merge.hs b/src/Storage/Merge.hs index 17b02aa..f0eaf98 100644 --- a/src/Storage/Merge.hs +++ b/src/Storage/Merge.hs @@ -6,6 +6,8 @@ module Storage.Merge ( ancestors, precedes, filterAncestors, + + findProperty, ) where import qualified Data.ByteString.Char8 as BC @@ -58,4 +60,12 @@ precedes :: Storable a => Stored a -> Stored a -> Bool precedes x y = x `S.member` ancestors [y] filterAncestors :: Storable a => [Stored a] -> [Stored a] +filterAncestors [x] = [x] filterAncestors xs = uniq $ sort $ filter (`S.notMember` ancestors xs) xs + + +findProperty :: forall a b. Storable a => (a -> Maybe b) -> [Stored a] -> [b] +findProperty sel = map (fromJust . sel . fromStored) . filterAncestors . (findPropHeads =<<) + where findPropHeads :: Stored a -> [Stored a] + findPropHeads sobj | Just _ <- sel $ fromStored sobj = [sobj] + | otherwise = findPropHeads =<< previous sobj -- cgit v1.2.3