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.8 && <5), dlist (>=0.8.0 && <0.9), hw-mquery, lens (>=4.17 && <4.18), semigroups (>=0.18.5 && <0.19) [details]
License BSD-3-Clause
Copyright 2018 John Ky
Author John Ky
Maintainer newhoggy@gmail.com
Revised Revision 1 made by GeorgeWilson at 2019-06-03T07:01:36Z
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 2018-12-27T23:09:53Z
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 2018-12-27 [all 1 reports]

Readme for hw-mquery-0.2.0.0

[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