hjson-query 1.0.1 → 1.0.2
raw patch · 2 files changed
+37/−39 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- hjson-query.cabal +2/−7
- src/Text/HJson/Query.hs +35/−32
hjson-query.cabal view
@@ -1,12 +1,11 @@ Name: hjson-query-Version: 1.0.1+Version: 1.0.2 Synopsis: library for querying from JSON Category: Text Description: library(HXT-like) for querying from JSON License: BSD3 License-file: LICENSE-Author: YuriyIskra <iskra.yw@gmail.com>-Maintainer: YuriyIskra <iskra.yw@gmail.com>+Author: YuriyIskra Stability: Experimental Copyright: Copyright (c) 2010 Yuriy Iskra Build-type: Simple@@ -23,7 +22,3 @@ containers >= 0.2 && < 1 hs-source-dirs: src----Source-repository head--- Type: git--- Location: git://github.com/iskra/hjson-query.git
src/Text/HJson/Query.hs view
@@ -55,26 +55,26 @@ -- Building --- | create empty JSON object+-- | Create empty JSON object. emptyObj :: Json emptyObj = JObject (M.empty) --- | create JSON object+-- | Create single JSON object. (-->) :: String -> Json -> Json key --> val = JObject (M.singleton key val) --- | merge two JSON Objects+-- | Merge two JSON Objects. (<>) :: Json -> Json -> Json (JObject x ) <> (JObject y) = JObject $ M.union x y-(<>) _ _ = emptyObj+(<>) x _ = x --- | recursive merge two JSON Objects+-- | Recursive merge two JSON Objects. (<.>) :: Json -> Json -> Json (JObject x) <.> (JObject y) = JObject $ M.unionWith (\m n -> m <.> n) x y-(<.>) _ _ = emptyObj+(<.>) x _ = x --- | merge list JSON Objects+-- | Merge list JSON Objects. merges :: [Json] -> Json merges [] = emptyObj merges js = foldl1 (<>) js@@ -117,48 +117,48 @@ -- Fitering --- | filter JSON objects +-- | Filter JSON objects . isObj :: JFilter isObj (JObject o) = [JObject o] isObj _ = [] --- | filter JSON arrays+-- | Filter JSON arrays. isArr :: JFilter isArr (JArray a) = [JArray a] isArr _ = [] --- | filter JSON strings+-- | Filter JSON strings. isStr :: JFilter isStr (JString s) = [JString s] isStr _ = [] --- | predicative filter JSON strings+-- | Predicative filter JSON strings. isStrBy :: (String -> Bool) -> JFilter isStrBy p (JString s) = if p s then [JString s] else [] isStrBy _ _ = [] --- | filter JSON numbers+-- | Filter JSON numbers. isNum :: JFilter isNum (JNumber n) = [JNumber n] isNum _ = [] --- | predicative filter JSON numbers+-- | Predicative filter JSON numbers. isNumBy :: Fractional a => (a -> Bool) -> JFilter isNumBy p (JNumber n) = if p (fromRational n) then [JNumber n] else [] isNumBy _ _ = [] --- | filter JSON Bool+-- | Filter JSON Bool. isBool :: JFilter isBool (JBool p) = [JBool p] isBool _ = [] --- | filter JSON null+-- | Filter JSON null. isNull :: JFilter isNull JNull = [JNull] isNull _ = [] --- | filter primitive types+-- | Filter primitive types. isPrimitive :: JFilter isPrimitive (JString s) = [JString s] isPrimitive (JNumber n) = [JNumber n]@@ -167,12 +167,12 @@ isPrimitive _ = [] --- | get elements from object with key+-- | Get elements from object with key. getFromKey :: String -> JFilter getFromKey k (JObject m) = Mb.catMaybes [(M.lookup k m)] getFromKey _ _ = [] --- | get elements from object with keys+-- | Get elements from object with keys. -- -- Example: -- @@ -198,33 +198,35 @@ getFromKeys ks (JObject m) = Mb.catMaybes $ map (\k -> (M.lookup k m)) (L.nub ks) getFromKeys _ _ = [] --- | get all elements from object+-- | Get all elements from object. getFromObj :: JFilter getFromObj (JObject o) = M.elems o getFromObj _ = [] --- | get all elements from array+-- | Get all elements from array. getFromArr :: JFilter getFromArr (JArray a) = a getFromArr _ = [] --- | get element from array with index+-- | Get element from array with index. getFromIndex :: Int -> JFilter getFromIndex i (JArray a) = if i < length a then [a !! i] else [] getFromIndex _ _ = [] --- | get elements from array with indexes+-- | Get elements from array with indexes. getFromIndexes :: [Int] -> JFilter getFromIndexes is ja = concat [getFromIndex i ja | i <- is] --- | get all elements from object and array+-- | Get all elements from object and array. getChildern :: JFilter getChildern (JObject o) = M.elems o getChildern (JArray a) = a getChildern _ = [] --- | Example:+-- | @(f >>> g)@ - Apply filter f, later filter g . --+-- Example:+-- -- > query2 = query1 >>> getFromObj -- > json2 = query2 merg -- > ex2 = pputJsons json2@@ -239,11 +241,11 @@ (>>>) :: JFilter -> JFilter -> JFilter (f >>> g) t = concat [g t' | t' <- f t] --- | concat result two filters+-- | Concat result two filters. (<+>) :: JFilter -> JFilter -> JFilter (f <+> g) t = f t ++ g t --- | +-- | @(f `orElse` g)@ - Apply f, if @f@ returned @null@ apply @g@. orElse :: JFilter -> JFilter -> JFilter orElse f g t | null res1 = g t@@ -251,27 +253,27 @@ where res1 = f t --- | +-- | @(f `when` g)@ - When @g@ returned @not null@, apply @f@. when :: JFilter -> JFilter -> JFilter when f g t | null (g t) = [t] | otherwise = f t --- | +-- | @(f `guards` g )@ - If @f@ returned null then @null@ else apply @g@. guards :: JFilter -> JFilter -> JFilter guards g f t | null (g t) = [] | otherwise = f t --- | tree traversal filter for object+-- | Tree traversal filter for object. deepObj :: JFilter -> JFilter deepObj f = f `orElse` (getFromObj >>> deepObj f) --- | tree traversal filter for array+-- | Tree traversal filter for array. deepArr :: JFilter -> JFilter deepArr f = f `orElse` (getFromArr >>> deepArr f) --- | tree traversal filter for objects and arrays+-- | Tree traversal filter for objects and arrays. -- -- Example: --@@ -291,6 +293,7 @@ -- > deep getFromArr -- > -- --- See also: <www.haskell.org/haskellwiki/HXT> +-- See also: <http://www.haskell.org/haskellwiki/HXT#The_concept_of_filters>+ deep :: JFilter -> JFilter deep f = f `orElse` (getChildern >>> deep f)