pred-trie 0.0.3 → 0.0.4
raw patch · 3 files changed
+22/−1 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Data.Trie.Pred.Disjoint: lookup :: (Eq t) => [t] -> RPDTrie p t x -> Maybe x
+ Data.Trie.Pred.Unified: lookup :: (Eq t) => [t] -> RPUTrie t x -> Maybe x
Files
- pred-trie.cabal +1/−1
- src/Data/Trie/Pred/Disjoint.hs +11/−0
- src/Data/Trie/Pred/Unified.hs +10/−0
pred-trie.cabal view
@@ -1,5 +1,5 @@ Name: pred-trie-Version: 0.0.3+Version: 0.0.4 Author: Athan Clark <athan.clark@gmail.com> Maintainer: Athan Clark <athan.clark@gmail.com> License: BSD3
src/Data/Trie/Pred/Disjoint.hs view
@@ -3,8 +3,10 @@ import Data.Trie.Pred.Disjoint.Tail import qualified Data.Trie.Pred.Disjoint.Tail as ND import Data.Monoid+import qualified Data.List.NonEmpty as NE +-- | A Rooted, predicate, disjointly indexed trie data RPDTrie p t x = Rooted (Maybe x) [NDPTrie p t x] instance (Eq p, Eq t) => Monoid (RPDTrie p t x) where@@ -19,3 +21,12 @@ go a [] = [a] go a (b:bs) | ND.areDisjoint a b = a : b : bs | otherwise = (ND.merge a b) : bs++lookup :: (Eq t) => [t] -> RPDTrie p t x -> Maybe x+lookup [] (Rooted mx _) = mx+lookup ts (Rooted _ xs) = getFirst $ map (ND.lookup $ NE.fromList ts) xs+ where+ getFirst :: [Maybe a] -> Maybe a+ getFirst [] = Nothing+ getFirst (Nothing:xs) = getFirst xs+ getFirst (Just x :xs) = Just x
src/Data/Trie/Pred/Unified.hs view
@@ -3,6 +3,7 @@ import Data.Trie.Pred.Unified.Tail import qualified Data.Trie.Pred.Unified.Tail as NU import Data.Monoid+import qualified Data.List.NonEmpty as NE data RPUTrie t x = Rooted (Maybe x) [NUPTrie t x]@@ -19,3 +20,12 @@ go a [] = [a] go a (b:bs) | NU.areDisjoint a b = a : b : bs | otherwise = (NU.merge a b) : bs++lookup :: (Eq t) => [t] -> RPUTrie t x -> Maybe x+lookup [] (Rooted mx _) = mx+lookup ts (Rooted _ xs) = getFirst $ map (NU.lookup $ NE.fromList ts) xs+ where+ getFirst :: [Maybe a] -> Maybe a+ getFirst [] = Nothing+ getFirst (Nothing:xs) = getFirst xs+ getFirst (Just x :xs) = Just x