hw-mquery: Monadic query DSL

[ bsd3, data, library, program ] [ Propose Tags ]

Please see README.md


[Skip to Readme]

Downloads

Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.0.0.1, 0.1.0.0, 0.1.0.1, 0.1.0.3, 0.2.0.0, 0.2.0.1, 0.2.0.2, 0.2.1.0, 0.2.1.1
Dependencies ansi-wl-pprint (>=0.6.8 && <0.7), base (>=4.11 && <5), dlist (>=0.8.0 && <1.1), hw-mquery, lens (>=4.17 && <6) [details]
License BSD-3-Clause
Copyright 2018-2021 John Ky
Author John Ky
Maintainer newhoggy@gmail.com
Revised Revision 1 made by newhoggy at 2022-08-31T06:53:43Z
Category Data
Home page http://github.com/haskell-works/hw-mquery#readme
Bug tracker https://github.com/haskell-works/hw-mquery/issues
Source repo head: git clone https://github.com/haskell-works/hw-mquery
Uploaded by haskellworks at 2022-03-26T02:14:42Z
Distributions
Reverse Dependencies 3 direct, 4 indirect [details]
Executables hw-mquery-example
Downloads 5436 total (24 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2022-03-26 [all 1 reports]

Readme for hw-mquery-0.2.1.1

[back to package description]

hw-mquery

master

import Control.Monad
import Data.Function
import Data.List
import HaskellWorks.Data.Json.Load
import HaskellWorks.Data.Json.PartialValue
import HaskellWorks.Data.Micro
import HaskellWorks.Data.MQuery
import HaskellWorks.Data.Row
import HaskellWorks.Diagnostics
import Text.PrettyPrint.ANSI.Leijen

import qualified Data.DList as DL
!json <- loadJsonPartial "../data/78mb.json"
!json <- loadJsonWithIndex "../data/78mb.json"
!json <- loadJsonWithPoppy512Index "../data/78mb.json"
!json <- loadJsonWithPoppy512SMinMaxIndex "../data/78mb.json"
let q = MQuery (DL.singleton json)
putPretty $ q >>= item & limit 10
putPretty $ q >>= item & page 10 1
putPretty $ q >>= item >>= hasKV "founded_year" (JsonPartialNumber 2005) & limit 10
putPretty $ q >>= item >>= entry
putPretty $ q >>= item >>= entry >>= named "name" & limit 10
putPretty $ q >>= item >>= entry >>= satisfying (\(k, _) -> k == "name") >>= value & limit 10
putPretty $ q >>= item >>= entry >>= satisfying ((== "name") . fst) >>= value & limit 10
putPretty $ q >>= (item >=> entry >=> key) & limit 10
putPretty $ q >>= item >>= entry >>= key & limit 100 & onList (uniq . sort)
putPretty $ (q >>= item >>= entry & limit 1) >>= field "name" & limit 10
putPretty $ do {j <- q; e <- item j; (k, v) <- entry e; return k}
putPretty $ do {j <- q; e <- item j; (k, v) <- entry e; guard (k == "name"); return v}

Decoding

Line separated base 64 encoded gzipped json

while read in; do echo "$in" | base64 --decode | gunzip; echo ""; done < file.lgz > firehose.json

Profiling with stack traces

mafia build -p
cabal repl --ghc-options='-fexternal-interpreter -prof'
import HaskellWorks.Data.Succinct.BalancedParens
import HaskellWorks.Data.Succinct.RankSelect.Binary.Poppy512
import HaskellWorks.Data.Positioning
import qualified Data.Vector.Storable as DVS
import HaskellWorks.Data.IndexedSeq
(jsonBS, jsonIb, jsonBp) <- loadJsonRawWithIndex "firehose.json"
let bp1 = SimpleBalancedParens jsonBp
let bp2 = SimpleBalancedParens (makePoppy512 jsonBp)
let bp3 = makePoppy512 jsonBp