packages feed

hw-json 0.8.0.0 → 0.8.1.0

raw patch · 17 files changed

+228/−209 lines, 17 filesdep +directorydep ~ansi-wl-pprintdep ~arraydep ~attoparsecPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: directory

Dependency ranges changed: ansi-wl-pprint, array, attoparsec, bytestring, containers, criterion, dlist, hspec, hw-balancedparens, hw-bits, hw-mquery, hw-parser, hw-prim, hw-rankselect, hw-rankselect-base, mmap, text, vector, word8

API changes (from Hackage documentation)

- HaskellWorks.Data.Json.LightJson: instance (HaskellWorks.Data.BalancedParens.BalancedParens.BalancedParens w, HaskellWorks.Data.RankSelect.Base.Rank0.Rank0 w, HaskellWorks.Data.RankSelect.Base.Rank1.Rank1 w, HaskellWorks.Data.RankSelect.Base.Select1.Select1 v, HaskellWorks.Data.Bits.BitWise.TestBit w) => HaskellWorks.Data.Json.LightJson.LightJsonAt (HaskellWorks.Data.Json.Succinct.Cursor.Internal.JsonCursor Data.ByteString.Internal.ByteString v w)
- HaskellWorks.Data.Json.PartialValue: instance (HaskellWorks.Data.BalancedParens.BalancedParens.BalancedParens w, HaskellWorks.Data.RankSelect.Base.Rank0.Rank0 w, HaskellWorks.Data.RankSelect.Base.Rank1.Rank1 w, HaskellWorks.Data.RankSelect.Base.Select1.Select1 v, HaskellWorks.Data.Bits.BitWise.TestBit w) => HaskellWorks.Data.Json.PartialValue.JsonPartialValueAt (HaskellWorks.Data.Json.Succinct.Cursor.Internal.JsonCursor Data.ByteString.Internal.ByteString v w)
- HaskellWorks.Data.Json.Succinct.Cursor.Internal: JsonCursor :: !t -> !v -> !w -> !Count -> JsonCursor t v w
- HaskellWorks.Data.Json.Succinct.Cursor.Internal: [balancedParens] :: JsonCursor t v w -> !w
- HaskellWorks.Data.Json.Succinct.Cursor.Internal: [cursorRank] :: JsonCursor t v w -> !Count
- HaskellWorks.Data.Json.Succinct.Cursor.Internal: [cursorText] :: JsonCursor t v w -> !t
- HaskellWorks.Data.Json.Succinct.Cursor.Internal: [interests] :: JsonCursor t v w -> !v
- HaskellWorks.Data.Json.Succinct.Cursor.Internal: data JsonCursor t v w
- HaskellWorks.Data.Json.Succinct.Cursor.Internal: instance (GHC.Classes.Eq t, GHC.Classes.Eq v, GHC.Classes.Eq w) => GHC.Classes.Eq (HaskellWorks.Data.Json.Succinct.Cursor.Internal.JsonCursor t v w)
- HaskellWorks.Data.Json.Succinct.Cursor.Internal: instance (GHC.Show.Show t, GHC.Show.Show v, GHC.Show.Show w) => GHC.Show.Show (HaskellWorks.Data.Json.Succinct.Cursor.Internal.JsonCursor t v w)
- HaskellWorks.Data.Json.Succinct.Cursor.Internal: instance (HaskellWorks.Data.BalancedParens.BalancedParens.BalancedParens u, HaskellWorks.Data.RankSelect.Base.Rank1.Rank1 u, HaskellWorks.Data.RankSelect.Base.Rank0.Rank0 u) => HaskellWorks.Data.TreeCursor.TreeCursor (HaskellWorks.Data.Json.Succinct.Cursor.Internal.JsonCursor t v u)
- HaskellWorks.Data.Json.Succinct.Cursor.Internal: instance (HaskellWorks.Data.Json.Succinct.Cursor.BlankedJson.FromBlankedJson (HaskellWorks.Data.Json.Succinct.Cursor.InterestBits.JsonInterestBits a), HaskellWorks.Data.Json.Succinct.Cursor.BlankedJson.FromBlankedJson (HaskellWorks.Data.Json.Succinct.Cursor.BalancedParens.JsonBalancedParens b)) => HaskellWorks.Data.FromByteString.FromByteString (HaskellWorks.Data.Json.Succinct.Cursor.Internal.JsonCursor Data.ByteString.Internal.ByteString a b)
- HaskellWorks.Data.Json.Succinct.Cursor.Internal: instance Data.String.IsString (HaskellWorks.Data.Json.Succinct.Cursor.Internal.JsonCursor Data.ByteString.Internal.ByteString (HaskellWorks.Data.Bits.BitShown.BitShown (Data.Vector.Storable.Vector GHC.Word.Word16)) (HaskellWorks.Data.BalancedParens.Simple.SimpleBalancedParens (Data.Vector.Storable.Vector GHC.Word.Word16)))
- HaskellWorks.Data.Json.Succinct.Cursor.Internal: instance Data.String.IsString (HaskellWorks.Data.Json.Succinct.Cursor.Internal.JsonCursor Data.ByteString.Internal.ByteString (HaskellWorks.Data.Bits.BitShown.BitShown (Data.Vector.Storable.Vector GHC.Word.Word32)) (HaskellWorks.Data.BalancedParens.Simple.SimpleBalancedParens (Data.Vector.Storable.Vector GHC.Word.Word32)))
- HaskellWorks.Data.Json.Succinct.Cursor.Internal: instance Data.String.IsString (HaskellWorks.Data.Json.Succinct.Cursor.Internal.JsonCursor Data.ByteString.Internal.ByteString (HaskellWorks.Data.Bits.BitShown.BitShown (Data.Vector.Storable.Vector GHC.Word.Word64)) (HaskellWorks.Data.BalancedParens.Simple.SimpleBalancedParens (Data.Vector.Storable.Vector GHC.Word.Word64)))
- HaskellWorks.Data.Json.Succinct.Cursor.Internal: instance Data.String.IsString (HaskellWorks.Data.Json.Succinct.Cursor.Internal.JsonCursor Data.ByteString.Internal.ByteString (HaskellWorks.Data.Bits.BitShown.BitShown (Data.Vector.Storable.Vector GHC.Word.Word8)) (HaskellWorks.Data.BalancedParens.Simple.SimpleBalancedParens (Data.Vector.Storable.Vector GHC.Word.Word8)))
- HaskellWorks.Data.Json.Succinct.Cursor.Internal: instance Data.String.IsString (HaskellWorks.Data.Json.Succinct.Cursor.Internal.JsonCursor Data.ByteString.Internal.ByteString HaskellWorks.Data.RankSelect.Poppy512.Poppy512 (HaskellWorks.Data.BalancedParens.Simple.SimpleBalancedParens (Data.Vector.Storable.Vector GHC.Word.Word64)))
- HaskellWorks.Data.Json.Succinct.Cursor.Internal: instance Data.String.IsString (HaskellWorks.Data.Json.Succinct.Cursor.Internal.JsonCursor GHC.Base.String (HaskellWorks.Data.Bits.BitShown.BitShown [GHC.Types.Bool]) (HaskellWorks.Data.BalancedParens.Simple.SimpleBalancedParens [GHC.Types.Bool]))
- HaskellWorks.Data.Json.Succinct.Cursor.Internal: instance HaskellWorks.Data.FromForeignRegion.FromForeignRegion (HaskellWorks.Data.Json.Succinct.Cursor.Internal.JsonCursor Data.ByteString.Internal.ByteString (HaskellWorks.Data.Bits.BitShown.BitShown (Data.Vector.Storable.Vector GHC.Word.Word16)) (HaskellWorks.Data.BalancedParens.Simple.SimpleBalancedParens (Data.Vector.Storable.Vector GHC.Word.Word16)))
- HaskellWorks.Data.Json.Succinct.Cursor.Internal: instance HaskellWorks.Data.FromForeignRegion.FromForeignRegion (HaskellWorks.Data.Json.Succinct.Cursor.Internal.JsonCursor Data.ByteString.Internal.ByteString (HaskellWorks.Data.Bits.BitShown.BitShown (Data.Vector.Storable.Vector GHC.Word.Word32)) (HaskellWorks.Data.BalancedParens.Simple.SimpleBalancedParens (Data.Vector.Storable.Vector GHC.Word.Word32)))
- HaskellWorks.Data.Json.Succinct.Cursor.Internal: instance HaskellWorks.Data.FromForeignRegion.FromForeignRegion (HaskellWorks.Data.Json.Succinct.Cursor.Internal.JsonCursor Data.ByteString.Internal.ByteString (HaskellWorks.Data.Bits.BitShown.BitShown (Data.Vector.Storable.Vector GHC.Word.Word64)) (HaskellWorks.Data.BalancedParens.Simple.SimpleBalancedParens (Data.Vector.Storable.Vector GHC.Word.Word64)))
- HaskellWorks.Data.Json.Succinct.Cursor.Internal: instance HaskellWorks.Data.FromForeignRegion.FromForeignRegion (HaskellWorks.Data.Json.Succinct.Cursor.Internal.JsonCursor Data.ByteString.Internal.ByteString (HaskellWorks.Data.Bits.BitShown.BitShown (Data.Vector.Storable.Vector GHC.Word.Word8)) (HaskellWorks.Data.BalancedParens.Simple.SimpleBalancedParens (Data.Vector.Storable.Vector GHC.Word.Word8)))
- HaskellWorks.Data.Json.Succinct.Cursor.Internal: instance HaskellWorks.Data.FromForeignRegion.FromForeignRegion (HaskellWorks.Data.Json.Succinct.Cursor.Internal.JsonCursor Data.ByteString.Internal.ByteString HaskellWorks.Data.RankSelect.Poppy512.Poppy512 (HaskellWorks.Data.BalancedParens.Simple.SimpleBalancedParens (Data.Vector.Storable.Vector GHC.Word.Word64)))
- HaskellWorks.Data.Json.Succinct.Cursor.Internal: jsonCursorPos :: (Rank1 w, Select1 v) => JsonCursor s v w -> Position
- HaskellWorks.Data.Json.Succinct.Index: instance (HaskellWorks.Data.BalancedParens.BalancedParens.BalancedParens w, HaskellWorks.Data.RankSelect.Base.Rank0.Rank0 w, HaskellWorks.Data.RankSelect.Base.Rank1.Rank1 w, HaskellWorks.Data.RankSelect.Base.Select1.Select1 v, HaskellWorks.Data.Bits.BitWise.TestBit w) => HaskellWorks.Data.Json.Succinct.Index.JsonIndexAt (HaskellWorks.Data.Json.Succinct.Cursor.Internal.JsonCursor Data.ByteString.Internal.ByteString v w)
- HaskellWorks.Data.Json.Succinct.PartialIndex: instance (HaskellWorks.Data.BalancedParens.BalancedParens.BalancedParens w, HaskellWorks.Data.RankSelect.Base.Rank0.Rank0 w, HaskellWorks.Data.RankSelect.Base.Rank1.Rank1 w, HaskellWorks.Data.RankSelect.Base.Select1.Select1 v, HaskellWorks.Data.Bits.BitWise.TestBit w) => HaskellWorks.Data.Json.Succinct.PartialIndex.JsonPartialIndexAt (HaskellWorks.Data.Json.Succinct.Cursor.Internal.JsonCursor Data.ByteString.Internal.ByteString v w)
- HaskellWorks.Data.Json.Type: instance (HaskellWorks.Data.BalancedParens.BalancedParens.BalancedParens w, HaskellWorks.Data.RankSelect.Base.Rank0.Rank0 w, HaskellWorks.Data.RankSelect.Base.Rank1.Rank1 w, HaskellWorks.Data.RankSelect.Base.Select1.Select1 v, HaskellWorks.Data.Bits.BitWise.TestBit w) => HaskellWorks.Data.Json.Type.JsonTypeAt (HaskellWorks.Data.Json.Succinct.Cursor.Internal.JsonCursor Data.ByteString.Internal.ByteString v w)
- HaskellWorks.Data.Json.Type: instance (HaskellWorks.Data.BalancedParens.BalancedParens.BalancedParens w, HaskellWorks.Data.RankSelect.Base.Rank0.Rank0 w, HaskellWorks.Data.RankSelect.Base.Rank1.Rank1 w, HaskellWorks.Data.RankSelect.Base.Select1.Select1 v, HaskellWorks.Data.Bits.BitWise.TestBit w) => HaskellWorks.Data.Json.Type.JsonTypeAt (HaskellWorks.Data.Json.Succinct.Cursor.Internal.JsonCursor GHC.Base.String v w)
+ HaskellWorks.Data.Json.Cursor: JsonCursor :: !t -> !v -> !w -> !Count -> JsonCursor t v w
+ HaskellWorks.Data.Json.Cursor: [balancedParens] :: JsonCursor t v w -> !w
+ HaskellWorks.Data.Json.Cursor: [cursorRank] :: JsonCursor t v w -> !Count
+ HaskellWorks.Data.Json.Cursor: [cursorText] :: JsonCursor t v w -> !t
+ HaskellWorks.Data.Json.Cursor: [interests] :: JsonCursor t v w -> !v
+ HaskellWorks.Data.Json.Cursor: data JsonCursor t v w
+ HaskellWorks.Data.Json.Cursor: instance (GHC.Classes.Eq t, GHC.Classes.Eq v, GHC.Classes.Eq w) => GHC.Classes.Eq (HaskellWorks.Data.Json.Cursor.JsonCursor t v w)
+ HaskellWorks.Data.Json.Cursor: instance (GHC.Show.Show t, GHC.Show.Show v, GHC.Show.Show w) => GHC.Show.Show (HaskellWorks.Data.Json.Cursor.JsonCursor t v w)
+ HaskellWorks.Data.Json.Cursor: instance (HaskellWorks.Data.BalancedParens.BalancedParens.BalancedParens u, HaskellWorks.Data.RankSelect.Base.Rank1.Rank1 u, HaskellWorks.Data.RankSelect.Base.Rank0.Rank0 u) => HaskellWorks.Data.TreeCursor.TreeCursor (HaskellWorks.Data.Json.Cursor.JsonCursor t v u)
+ HaskellWorks.Data.Json.Cursor: instance (HaskellWorks.Data.Json.Succinct.Cursor.BlankedJson.FromBlankedJson (HaskellWorks.Data.Json.Succinct.Cursor.InterestBits.JsonInterestBits a), HaskellWorks.Data.Json.Succinct.Cursor.BlankedJson.FromBlankedJson (HaskellWorks.Data.Json.Succinct.Cursor.BalancedParens.JsonBalancedParens b)) => HaskellWorks.Data.FromByteString.FromByteString (HaskellWorks.Data.Json.Cursor.JsonCursor Data.ByteString.Internal.ByteString a b)
+ HaskellWorks.Data.Json.Cursor: instance Data.String.IsString (HaskellWorks.Data.Json.Cursor.JsonCursor Data.ByteString.Internal.ByteString (HaskellWorks.Data.Bits.BitShown.BitShown (Data.Vector.Storable.Vector GHC.Word.Word16)) (HaskellWorks.Data.BalancedParens.Simple.SimpleBalancedParens (Data.Vector.Storable.Vector GHC.Word.Word16)))
+ HaskellWorks.Data.Json.Cursor: instance Data.String.IsString (HaskellWorks.Data.Json.Cursor.JsonCursor Data.ByteString.Internal.ByteString (HaskellWorks.Data.Bits.BitShown.BitShown (Data.Vector.Storable.Vector GHC.Word.Word32)) (HaskellWorks.Data.BalancedParens.Simple.SimpleBalancedParens (Data.Vector.Storable.Vector GHC.Word.Word32)))
+ HaskellWorks.Data.Json.Cursor: instance Data.String.IsString (HaskellWorks.Data.Json.Cursor.JsonCursor Data.ByteString.Internal.ByteString (HaskellWorks.Data.Bits.BitShown.BitShown (Data.Vector.Storable.Vector GHC.Word.Word64)) (HaskellWorks.Data.BalancedParens.Simple.SimpleBalancedParens (Data.Vector.Storable.Vector GHC.Word.Word64)))
+ HaskellWorks.Data.Json.Cursor: instance Data.String.IsString (HaskellWorks.Data.Json.Cursor.JsonCursor Data.ByteString.Internal.ByteString (HaskellWorks.Data.Bits.BitShown.BitShown (Data.Vector.Storable.Vector GHC.Word.Word8)) (HaskellWorks.Data.BalancedParens.Simple.SimpleBalancedParens (Data.Vector.Storable.Vector GHC.Word.Word8)))
+ HaskellWorks.Data.Json.Cursor: instance Data.String.IsString (HaskellWorks.Data.Json.Cursor.JsonCursor Data.ByteString.Internal.ByteString HaskellWorks.Data.RankSelect.Poppy512.Poppy512 (HaskellWorks.Data.BalancedParens.Simple.SimpleBalancedParens (Data.Vector.Storable.Vector GHC.Word.Word64)))
+ HaskellWorks.Data.Json.Cursor: instance Data.String.IsString (HaskellWorks.Data.Json.Cursor.JsonCursor GHC.Base.String (HaskellWorks.Data.Bits.BitShown.BitShown [GHC.Types.Bool]) (HaskellWorks.Data.BalancedParens.Simple.SimpleBalancedParens [GHC.Types.Bool]))
+ HaskellWorks.Data.Json.Cursor: instance HaskellWorks.Data.FromForeignRegion.FromForeignRegion (HaskellWorks.Data.Json.Cursor.JsonCursor Data.ByteString.Internal.ByteString (HaskellWorks.Data.Bits.BitShown.BitShown (Data.Vector.Storable.Vector GHC.Word.Word16)) (HaskellWorks.Data.BalancedParens.Simple.SimpleBalancedParens (Data.Vector.Storable.Vector GHC.Word.Word16)))
+ HaskellWorks.Data.Json.Cursor: instance HaskellWorks.Data.FromForeignRegion.FromForeignRegion (HaskellWorks.Data.Json.Cursor.JsonCursor Data.ByteString.Internal.ByteString (HaskellWorks.Data.Bits.BitShown.BitShown (Data.Vector.Storable.Vector GHC.Word.Word32)) (HaskellWorks.Data.BalancedParens.Simple.SimpleBalancedParens (Data.Vector.Storable.Vector GHC.Word.Word32)))
+ HaskellWorks.Data.Json.Cursor: instance HaskellWorks.Data.FromForeignRegion.FromForeignRegion (HaskellWorks.Data.Json.Cursor.JsonCursor Data.ByteString.Internal.ByteString (HaskellWorks.Data.Bits.BitShown.BitShown (Data.Vector.Storable.Vector GHC.Word.Word64)) (HaskellWorks.Data.BalancedParens.Simple.SimpleBalancedParens (Data.Vector.Storable.Vector GHC.Word.Word64)))
+ HaskellWorks.Data.Json.Cursor: instance HaskellWorks.Data.FromForeignRegion.FromForeignRegion (HaskellWorks.Data.Json.Cursor.JsonCursor Data.ByteString.Internal.ByteString (HaskellWorks.Data.Bits.BitShown.BitShown (Data.Vector.Storable.Vector GHC.Word.Word8)) (HaskellWorks.Data.BalancedParens.Simple.SimpleBalancedParens (Data.Vector.Storable.Vector GHC.Word.Word8)))
+ HaskellWorks.Data.Json.Cursor: instance HaskellWorks.Data.FromForeignRegion.FromForeignRegion (HaskellWorks.Data.Json.Cursor.JsonCursor Data.ByteString.Internal.ByteString HaskellWorks.Data.RankSelect.Poppy512.Poppy512 (HaskellWorks.Data.BalancedParens.Simple.SimpleBalancedParens (Data.Vector.Storable.Vector GHC.Word.Word64)))
+ HaskellWorks.Data.Json.Cursor: jsonCursorPos :: (Rank1 w, Select1 v) => JsonCursor s v w -> Position
+ HaskellWorks.Data.Json.LightJson: instance (HaskellWorks.Data.BalancedParens.BalancedParens.BalancedParens w, HaskellWorks.Data.RankSelect.Base.Rank0.Rank0 w, HaskellWorks.Data.RankSelect.Base.Rank1.Rank1 w, HaskellWorks.Data.RankSelect.Base.Select1.Select1 v, HaskellWorks.Data.Bits.BitWise.TestBit w) => HaskellWorks.Data.Json.LightJson.LightJsonAt (HaskellWorks.Data.Json.Cursor.JsonCursor Data.ByteString.Internal.ByteString v w)
+ HaskellWorks.Data.Json.PartialValue: instance (HaskellWorks.Data.BalancedParens.BalancedParens.BalancedParens w, HaskellWorks.Data.RankSelect.Base.Rank0.Rank0 w, HaskellWorks.Data.RankSelect.Base.Rank1.Rank1 w, HaskellWorks.Data.RankSelect.Base.Select1.Select1 v, HaskellWorks.Data.Bits.BitWise.TestBit w) => HaskellWorks.Data.Json.PartialValue.JsonPartialValueAt (HaskellWorks.Data.Json.Cursor.JsonCursor Data.ByteString.Internal.ByteString v w)
+ HaskellWorks.Data.Json.Succinct.Index: instance (HaskellWorks.Data.BalancedParens.BalancedParens.BalancedParens w, HaskellWorks.Data.RankSelect.Base.Rank0.Rank0 w, HaskellWorks.Data.RankSelect.Base.Rank1.Rank1 w, HaskellWorks.Data.RankSelect.Base.Select1.Select1 v, HaskellWorks.Data.Bits.BitWise.TestBit w) => HaskellWorks.Data.Json.Succinct.Index.JsonIndexAt (HaskellWorks.Data.Json.Cursor.JsonCursor Data.ByteString.Internal.ByteString v w)
+ HaskellWorks.Data.Json.Succinct.PartialIndex: instance (HaskellWorks.Data.BalancedParens.BalancedParens.BalancedParens w, HaskellWorks.Data.RankSelect.Base.Rank0.Rank0 w, HaskellWorks.Data.RankSelect.Base.Rank1.Rank1 w, HaskellWorks.Data.RankSelect.Base.Select1.Select1 v, HaskellWorks.Data.Bits.BitWise.TestBit w) => HaskellWorks.Data.Json.Succinct.PartialIndex.JsonPartialIndexAt (HaskellWorks.Data.Json.Cursor.JsonCursor Data.ByteString.Internal.ByteString v w)
+ HaskellWorks.Data.Json.Type: instance (HaskellWorks.Data.BalancedParens.BalancedParens.BalancedParens w, HaskellWorks.Data.RankSelect.Base.Rank0.Rank0 w, HaskellWorks.Data.RankSelect.Base.Rank1.Rank1 w, HaskellWorks.Data.RankSelect.Base.Select1.Select1 v, HaskellWorks.Data.Bits.BitWise.TestBit w) => HaskellWorks.Data.Json.Type.JsonTypeAt (HaskellWorks.Data.Json.Cursor.JsonCursor Data.ByteString.Internal.ByteString v w)
+ HaskellWorks.Data.Json.Type: instance (HaskellWorks.Data.BalancedParens.BalancedParens.BalancedParens w, HaskellWorks.Data.RankSelect.Base.Rank0.Rank0 w, HaskellWorks.Data.RankSelect.Base.Rank1.Rank1 w, HaskellWorks.Data.RankSelect.Base.Select1.Select1 v, HaskellWorks.Data.Bits.BitWise.TestBit w) => HaskellWorks.Data.Json.Type.JsonTypeAt (HaskellWorks.Data.Json.Cursor.JsonCursor GHC.Base.String v w)

Files

app/Main.hs view
@@ -10,9 +10,9 @@ import HaskellWorks.Data.BalancedParens.Simple import HaskellWorks.Data.Bits.BitShown import HaskellWorks.Data.FromByteString+import HaskellWorks.Data.Json.Cursor import HaskellWorks.Data.Json.LightJson import HaskellWorks.Data.Json.LoadCursor-import HaskellWorks.Data.Json.Succinct.Cursor.Internal import HaskellWorks.Data.Micro import HaskellWorks.Data.MQuery 
bench/Main.hs view
@@ -3,20 +3,23 @@  module Main where +import Control.Monad import Criterion.Main+import Data.List import Data.Word import Foreign import HaskellWorks.Data.BalancedParens.Simple import HaskellWorks.Data.Bits.BitShown import HaskellWorks.Data.FromByteString+import HaskellWorks.Data.Json.Cursor import HaskellWorks.Data.Json.Internal.Blank import HaskellWorks.Data.Json.Internal.MakeIndex-import HaskellWorks.Data.Json.Succinct.Cursor.Internal import System.IO.MMap  import qualified Data.ByteString          as BS import qualified Data.ByteString.Internal as BSI import qualified Data.Vector.Storable     as DVS+import qualified System.Directory         as IO  setupEnvJson :: FilePath -> IO BS.ByteString setupEnvJson filepath = do@@ -30,32 +33,47 @@ jsonToInterestBits3 :: [BS.ByteString] -> [BS.ByteString] jsonToInterestBits3 = blankedJsonToInterestBits . blankJson -benchRankJson40 :: [Benchmark]-benchRankJson40 =-  [ env (setupEnvJson "corpus/part40.json") $ \bs -> bgroup "Json40"-    [ bench "Run blankJson                    "  (whnf (BS.concat . blankJson          ) [bs])-    , bench "Run jsonToInterestBits3          "  (whnf (BS.concat . jsonToInterestBits3) [bs])-    , bench "loadJson                         "  (whnf loadJson                           bs )+makeBenchBlankJson :: IO [Benchmark]+makeBenchBlankJson = do+  entries <- IO.listDirectory "corpus/bench"+  let files = ("corpus/bench/" ++) <$> (".json" `isSuffixOf`) `filter` entries+  benchmarks <- forM files $ \file -> return+    [ env (setupEnvJson file) $ \bs -> bgroup file+      [ bench "Run blankJson" (whnf (BS.concat . blankJson) [bs])+      ]     ]-  ] -benchRankJson80 :: [Benchmark]-benchRankJson80 =-  [ env (setupEnvJson "corpus/part80.json") $ \bs -> bgroup "Json40"-    [ bench "Run blankJson                    "  (whnf (BS.concat . blankJson          ) [bs])-    , bench "Run jsonToInterestBits3          "  (whnf (BS.concat . jsonToInterestBits3) [bs])-    , bench "loadJson" (whnf loadJson bs)+  return (join benchmarks)++makeBenchJsonToInterestBits :: IO [Benchmark]+makeBenchJsonToInterestBits = do+  entries <- IO.listDirectory "corpus/bench"+  let files = ("corpus/bench/" ++) <$> (".json" `isSuffixOf`) `filter` entries+  benchmarks <- forM files $ \file -> return+    [ env (setupEnvJson file) $ \bs -> bgroup file+      [ bench "Run blankJson" (whnf (BS.concat . jsonToInterestBits3) [bs])+      ]     ]-  ] -benchRankJsonBig :: [Benchmark]-benchRankJsonBig =-  [ env (setupEnvJson "corpus/78mb.json") $ \bs -> bgroup "JsonBig"-    [ bench "Run blankJson                    "  (whnf (BS.concat . blankJson          ) [bs])-    , bench "Run jsonToInterestBits3          "  (whnf (BS.concat . jsonToInterestBits3) [bs])-    , bench "loadJson" (whnf loadJson bs)+  return (join benchmarks)++makeBenchLoadJson :: IO [Benchmark]+makeBenchLoadJson = do+  entries <- IO.listDirectory "corpus/bench"+  let files = ("corpus/bench/" ++) <$> (".json" `isSuffixOf`) `filter` entries+  benchmarks <- forM files $ \file -> return+    [ env (setupEnvJson file) $ \bs -> bgroup file+      [ bench "Run blankJson" (whnf loadJson bs)+      ]     ]-  ] +  return (join benchmarks)+ main :: IO ()-main = defaultMain benchRankJson40+main = do+  benchmarks <- mconcat <$> sequence+    [ makeBenchBlankJson+    , makeBenchJsonToInterestBits+    , makeBenchLoadJson+    ]+  defaultMain benchmarks
hw-json.cabal view
@@ -3,7 +3,7 @@ -- see: https://github.com/sol/hpack  name:           hw-json-version:        0.8.0.0+version:        0.8.1.0 synopsis:       Memory efficient JSON parser description:    Memory efficient JSON parser. Please see README.md category:       Data@@ -46,24 +46,24 @@       src   ghc-options: -Wall -O2 -msse4.2   build-depends:-      base                >= 4 && <5-    , bytestring-    , hw-balancedparens   >= 0.1.0.0-    , hw-bits             >= 0.4.0.0-    , hw-prim             >= 0.4.0.0-    , hw-rankselect       >= 0.8.0.0-    , hw-rankselect-base  >= 0.2.0.0-    , mmap-    , vector-    , array-    , ansi-wl-pprint-    , attoparsec-    , containers-    , dlist-    , hw-mquery         >= 0.1.0.0-    , hw-parser         >= 0.1.0.0-    , text-    , word8+      base                >= 4          && < 5+    , bytestring          >= 0.10.8     && < 0.11+    , hw-balancedparens   >= 0.2.0.1    && < 0.3+    , hw-bits             >= 0.7.0.2    && < 0.8+    , hw-prim             >= 0.6.2.0    && < 0.7+    , hw-rankselect       >= 0.10       && < 0.11+    , hw-rankselect-base  >= 0.3        && < 0.4+    , mmap                >= 0.5        && < 0.6+    , vector              >= 0.12       && < 0.13+    , array             >= 0.5        && < 0.6+    , ansi-wl-pprint    >= 0.6.8.2    && < 0.7+    , attoparsec        >= 0.13       && < 0.14+    , containers        >= 0.5        && < 0.6+    , dlist             >= 0.8        && < 0.9+    , hw-mquery         >= 0.1        && < 0.2+    , hw-parser         >= 0.1        && < 0.2+    , text              >= 1.2        && < 1.3+    , word8             >= 0.1        && < 0.2   if (flag(sse42))     ghc-options: -mbmi2   if (flag(bmi2)) && (impl(ghc >=8.4.1))@@ -72,6 +72,7 @@   exposed-modules:       HaskellWorks.Data.Json       HaskellWorks.Data.Json.CharLike+      HaskellWorks.Data.Json.Cursor       HaskellWorks.Data.Json.DecodeError       HaskellWorks.Data.Json.FromValue       HaskellWorks.Data.Json.Internal.Blank@@ -84,7 +85,6 @@       HaskellWorks.Data.Json.Succinct.Cursor.BalancedParens       HaskellWorks.Data.Json.Succinct.Cursor.BlankedJson       HaskellWorks.Data.Json.Succinct.Cursor.InterestBits-      HaskellWorks.Data.Json.Succinct.Cursor.Internal       HaskellWorks.Data.Json.Succinct.Cursor.Token       HaskellWorks.Data.Json.Succinct.Index       HaskellWorks.Data.Json.Succinct.PartialIndex@@ -104,19 +104,19 @@       app   ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-N -O2 -msse4.2   build-depends:-      base                >= 4 && <5-    , bytestring-    , hw-balancedparens   >= 0.1.0.0-    , hw-bits             >= 0.4.0.0-    , hw-prim             >= 0.4.0.0-    , hw-rankselect       >= 0.8.0.0-    , hw-rankselect-base  >= 0.2.0.0-    , mmap-    , vector-    , criterion-    , dlist+      base                >= 4          && < 5+    , bytestring          >= 0.10.8     && < 0.11+    , hw-balancedparens   >= 0.2.0.1    && < 0.3+    , hw-bits             >= 0.7.0.2    && < 0.8+    , hw-prim             >= 0.6.2.0    && < 0.7+    , hw-rankselect       >= 0.10       && < 0.11+    , hw-rankselect-base  >= 0.3        && < 0.4+    , mmap                >= 0.5        && < 0.6+    , vector              >= 0.12       && < 0.13+    , criterion         >= 1.4        && < 1.5+    , dlist             >= 0.8        && < 0.9     , hw-json-    , hw-mquery         >= 0.1.0.0+    , hw-mquery         >= 0.1        && < 0.2   if (flag(sse42))     ghc-options: -mbmi2   if (flag(bmi2)) && (impl(ghc >=8.4.1))@@ -131,18 +131,18 @@       test   ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-N   build-depends:-      base                >= 4 && <5-    , bytestring-    , hw-balancedparens   >= 0.1.0.0-    , hw-bits             >= 0.4.0.0-    , hw-prim             >= 0.4.0.0-    , hw-rankselect       >= 0.8.0.0-    , hw-rankselect-base  >= 0.2.0.0-    , mmap-    , vector-    , attoparsec-    , containers-    , hspec+      base                >= 4          && < 5+    , bytestring          >= 0.10.8     && < 0.11+    , hw-balancedparens   >= 0.2.0.1    && < 0.3+    , hw-bits             >= 0.7.0.2    && < 0.8+    , hw-prim             >= 0.6.2.0    && < 0.7+    , hw-rankselect       >= 0.10       && < 0.11+    , hw-rankselect-base  >= 0.3        && < 0.4+    , mmap                >= 0.5        && < 0.6+    , vector              >= 0.12       && < 0.13+    , attoparsec        >= 0.13       && < 0.14+    , containers        >= 0.5        && < 0.6+    , hspec             >= 2.5        && < 2.6     , hw-json   if (flag(sse42))     ghc-options: -mbmi2@@ -167,16 +167,17 @@       bench   ghc-options: -Wall -O2 -msse4.2   build-depends:-      base                >= 4 && <5-    , bytestring-    , hw-balancedparens   >= 0.1.0.0-    , hw-bits             >= 0.4.0.0-    , hw-prim             >= 0.4.0.0-    , hw-rankselect       >= 0.8.0.0-    , hw-rankselect-base  >= 0.2.0.0-    , mmap-    , vector-    , criterion+      base                >= 4          && < 5+    , bytestring          >= 0.10.8     && < 0.11+    , hw-balancedparens   >= 0.2.0.1    && < 0.3+    , hw-bits             >= 0.7.0.2    && < 0.8+    , hw-prim             >= 0.6.2.0    && < 0.7+    , hw-rankselect       >= 0.10       && < 0.11+    , hw-rankselect-base  >= 0.3        && < 0.4+    , mmap                >= 0.5        && < 0.6+    , vector              >= 0.12       && < 0.13+    , criterion         >= 1.4        && < 1.5+    , directory         >= 1.3        && < 1.4     , hw-json   if (flag(sse42))     ghc-options: -mbmi2
+ src/HaskellWorks/Data/Json/Cursor.hs view
@@ -0,0 +1,113 @@+{-# LANGUAGE FlexibleContexts      #-}+{-# LANGUAGE FlexibleInstances     #-}+{-# LANGUAGE InstanceSigs          #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE ScopedTypeVariables   #-}++module HaskellWorks.Data.Json.Cursor+  ( JsonCursor(..)+  , jsonCursorPos+  ) where++import Data.ByteString.Internal                            as BSI+import Data.String+import Data.Word+import Foreign.ForeignPtr+import HaskellWorks.Data.Bits.BitShown+import HaskellWorks.Data.FromByteString+import HaskellWorks.Data.FromForeignRegion+import HaskellWorks.Data.Json.Succinct.Cursor.BlankedJson+import HaskellWorks.Data.Json.Succinct.Cursor.InterestBits+import HaskellWorks.Data.Positioning+import HaskellWorks.Data.RankSelect.Base.Rank0+import HaskellWorks.Data.RankSelect.Base.Rank1+import HaskellWorks.Data.RankSelect.Base.Select1+import HaskellWorks.Data.RankSelect.Poppy512+import HaskellWorks.Data.TreeCursor++import qualified Data.ByteString                                       as BS+import qualified Data.ByteString.Char8                                 as BSC+import qualified Data.Vector.Storable                                  as DVS+import qualified HaskellWorks.Data.BalancedParens                      as BP+import qualified HaskellWorks.Data.Json.Succinct.Cursor.BalancedParens as CBP++data JsonCursor t v w = JsonCursor+  { cursorText     :: !t+  , interests      :: !v+  , balancedParens :: !w+  , cursorRank     :: !Count+  }+  deriving (Eq, Show)++instance  (FromBlankedJson (JsonInterestBits a), FromBlankedJson (CBP.JsonBalancedParens b))+          => FromByteString (JsonCursor BS.ByteString a b) where+  fromByteString bs   = JsonCursor+    { cursorText      = bs+    , interests       = getJsonInterestBits (fromBlankedJson blankedJson)+    , balancedParens  = CBP.getJsonBalancedParens (fromBlankedJson blankedJson)+    , cursorRank      = 1+    }+    where blankedJson :: BlankedJson+          blankedJson = fromByteString bs++instance IsString (JsonCursor String (BitShown [Bool]) (BP.SimpleBalancedParens [Bool])) where+  fromString :: String -> JsonCursor String (BitShown [Bool]) (BP.SimpleBalancedParens [Bool])+  fromString s = JsonCursor+    { cursorText      = s+    , cursorRank      = 1+    , interests       = getJsonInterestBits (fromBlankedJson blankedJson)+    , balancedParens  = CBP.getJsonBalancedParens (fromBlankedJson blankedJson)+    }+    where blankedJson :: BlankedJson+          blankedJson = fromByteString (BSC.pack s)++instance IsString (JsonCursor BS.ByteString (BitShown (DVS.Vector Word8)) (BP.SimpleBalancedParens (DVS.Vector Word8))) where+  fromString = fromByteString . BSC.pack++instance IsString (JsonCursor BS.ByteString (BitShown (DVS.Vector Word16)) (BP.SimpleBalancedParens (DVS.Vector Word16))) where+  fromString = fromByteString . BSC.pack++instance IsString (JsonCursor BS.ByteString (BitShown (DVS.Vector Word32)) (BP.SimpleBalancedParens (DVS.Vector Word32))) where+  fromString = fromByteString . BSC.pack++instance IsString (JsonCursor BS.ByteString (BitShown (DVS.Vector Word64)) (BP.SimpleBalancedParens (DVS.Vector Word64))) where+  fromString = fromByteString . BSC.pack++instance IsString (JsonCursor BS.ByteString Poppy512 (BP.SimpleBalancedParens (DVS.Vector Word64))) where+  fromString = fromByteString . BSC.pack++instance FromForeignRegion (JsonCursor BS.ByteString (BitShown (DVS.Vector Word8)) (BP.SimpleBalancedParens (DVS.Vector Word8))) where+  fromForeignRegion (fptr, offset, size) = fromByteString (BSI.fromForeignPtr (castForeignPtr fptr) offset size)++instance FromForeignRegion (JsonCursor BS.ByteString (BitShown (DVS.Vector Word16)) (BP.SimpleBalancedParens (DVS.Vector Word16))) where+  fromForeignRegion (fptr, offset, size) = fromByteString (BSI.fromForeignPtr (castForeignPtr fptr) offset size)++instance FromForeignRegion (JsonCursor BS.ByteString (BitShown (DVS.Vector Word32)) (BP.SimpleBalancedParens (DVS.Vector Word32))) where+  fromForeignRegion (fptr, offset, size) = fromByteString (BSI.fromForeignPtr (castForeignPtr fptr) offset size)++instance FromForeignRegion (JsonCursor BS.ByteString (BitShown (DVS.Vector Word64)) (BP.SimpleBalancedParens (DVS.Vector Word64))) where+  fromForeignRegion (fptr, offset, size) = fromByteString (BSI.fromForeignPtr (castForeignPtr fptr) offset size)++instance FromForeignRegion (JsonCursor BS.ByteString Poppy512 (BP.SimpleBalancedParens (DVS.Vector Word64))) where+  fromForeignRegion (fptr, offset, size) = fromByteString (BSI.fromForeignPtr (castForeignPtr fptr) offset size)++instance (BP.BalancedParens u, Rank1 u, Rank0 u) => TreeCursor (JsonCursor t v u) where+  firstChild :: JsonCursor t v u -> Maybe (JsonCursor t v u)+  firstChild k = let mq = BP.firstChild (balancedParens k) (cursorRank k) in (\q -> k { cursorRank = q }) <$> mq++  nextSibling :: JsonCursor t v u -> Maybe (JsonCursor t v u)+  nextSibling k = (\q -> k { cursorRank = q }) <$> BP.nextSibling (balancedParens k) (cursorRank k)++  parent :: JsonCursor t v u -> Maybe (JsonCursor t v u)+  parent k = let mq = BP.parent (balancedParens k) (cursorRank k) in (\q -> k { cursorRank = q }) <$> mq++  depth :: JsonCursor t v u -> Maybe Count+  depth k = BP.depth (balancedParens k) (cursorRank k)++  subtreeSize :: JsonCursor t v u -> Maybe Count+  subtreeSize k = BP.subtreeSize (balancedParens k) (cursorRank k)++jsonCursorPos :: (Rank1 w, Select1 v) => JsonCursor s v w -> Position+jsonCursorPos k = toPosition (select1 ik (rank1 bpk (cursorRank k)) - 1)+  where ik  = interests k+        bpk = balancedParens k
src/HaskellWorks/Data/Json/LightJson.hs view
@@ -17,8 +17,8 @@ import HaskellWorks.Data.Drop import HaskellWorks.Data.Entry import HaskellWorks.Data.Json.CharLike+import HaskellWorks.Data.Json.Cursor import HaskellWorks.Data.Json.Internal.Words-import HaskellWorks.Data.Json.Succinct.Cursor.Internal import HaskellWorks.Data.Micro import HaskellWorks.Data.Mini import HaskellWorks.Data.MQuery@@ -29,7 +29,7 @@ import HaskellWorks.Data.Row import HaskellWorks.Data.TreeCursor import HaskellWorks.Data.Uncons-import Prelude                                         hiding (drop)+import Prelude                                   hiding (drop) import Text.PrettyPrint.ANSI.Leijen  import qualified Data.Attoparsec.ByteString.Char8 as ABC
src/HaskellWorks/Data/Json/Load.hs view
@@ -23,9 +23,9 @@ import HaskellWorks.Data.Bits.BitShown import HaskellWorks.Data.FromByteString import HaskellWorks.Data.FromForeignRegion+import HaskellWorks.Data.Json.Cursor import HaskellWorks.Data.Json.DecodeError import HaskellWorks.Data.Json.PartialValue-import HaskellWorks.Data.Json.Succinct.Cursor.Internal import HaskellWorks.Data.Json.Succinct.Index import HaskellWorks.Data.Json.Succinct.PartialIndex import HaskellWorks.Data.Json.Value
src/HaskellWorks/Data/Json/LoadCursor.hs view
@@ -21,8 +21,8 @@ import HaskellWorks.Data.Bits.BitShown import HaskellWorks.Data.FromByteString import HaskellWorks.Data.FromForeignRegion+import HaskellWorks.Data.Json.Cursor import HaskellWorks.Data.Json.DecodeError-import HaskellWorks.Data.Json.Succinct.Cursor.Internal import HaskellWorks.Data.Json.Succinct.Index import HaskellWorks.Data.Json.Value import HaskellWorks.Data.RankSelect.CsPoppy
src/HaskellWorks/Data/Json/PartialValue.hs view
@@ -24,7 +24,7 @@ import HaskellWorks.Data.AtLeastSize import HaskellWorks.Data.Bits.BitWise import HaskellWorks.Data.Entry-import HaskellWorks.Data.Json.Succinct.Cursor.Internal+import HaskellWorks.Data.Json.Cursor import HaskellWorks.Data.Json.Succinct.PartialIndex import HaskellWorks.Data.Json.Value.Internal import HaskellWorks.Data.Micro
− src/HaskellWorks/Data/Json/Succinct/Cursor/Internal.hs
@@ -1,113 +0,0 @@-{-# LANGUAGE FlexibleContexts      #-}-{-# LANGUAGE FlexibleInstances     #-}-{-# LANGUAGE InstanceSigs          #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE ScopedTypeVariables   #-}--module HaskellWorks.Data.Json.Succinct.Cursor.Internal-  ( JsonCursor(..)-  , jsonCursorPos-  ) where--import Data.ByteString.Internal                            as BSI-import Data.String-import Data.Word-import Foreign.ForeignPtr-import HaskellWorks.Data.Bits.BitShown-import HaskellWorks.Data.FromByteString-import HaskellWorks.Data.FromForeignRegion-import HaskellWorks.Data.Json.Succinct.Cursor.BlankedJson-import HaskellWorks.Data.Json.Succinct.Cursor.InterestBits-import HaskellWorks.Data.Positioning-import HaskellWorks.Data.RankSelect.Base.Rank0-import HaskellWorks.Data.RankSelect.Base.Rank1-import HaskellWorks.Data.RankSelect.Base.Select1-import HaskellWorks.Data.RankSelect.Poppy512-import HaskellWorks.Data.TreeCursor--import qualified Data.ByteString                                       as BS-import qualified Data.ByteString.Char8                                 as BSC-import qualified Data.Vector.Storable                                  as DVS-import qualified HaskellWorks.Data.BalancedParens                      as BP-import qualified HaskellWorks.Data.Json.Succinct.Cursor.BalancedParens as CBP--data JsonCursor t v w = JsonCursor-  { cursorText     :: !t-  , interests      :: !v-  , balancedParens :: !w-  , cursorRank     :: !Count-  }-  deriving (Eq, Show)--instance  (FromBlankedJson (JsonInterestBits a), FromBlankedJson (CBP.JsonBalancedParens b))-          => FromByteString (JsonCursor BS.ByteString a b) where-  fromByteString bs   = JsonCursor-    { cursorText      = bs-    , interests       = getJsonInterestBits (fromBlankedJson blankedJson)-    , balancedParens  = CBP.getJsonBalancedParens (fromBlankedJson blankedJson)-    , cursorRank      = 1-    }-    where blankedJson :: BlankedJson-          blankedJson = fromByteString bs--instance IsString (JsonCursor String (BitShown [Bool]) (BP.SimpleBalancedParens [Bool])) where-  fromString :: String -> JsonCursor String (BitShown [Bool]) (BP.SimpleBalancedParens [Bool])-  fromString s = JsonCursor-    { cursorText      = s-    , cursorRank      = 1-    , interests       = getJsonInterestBits (fromBlankedJson blankedJson)-    , balancedParens  = CBP.getJsonBalancedParens (fromBlankedJson blankedJson)-    }-    where blankedJson :: BlankedJson-          blankedJson = fromByteString (BSC.pack s)--instance IsString (JsonCursor BS.ByteString (BitShown (DVS.Vector Word8)) (BP.SimpleBalancedParens (DVS.Vector Word8))) where-  fromString = fromByteString . BSC.pack--instance IsString (JsonCursor BS.ByteString (BitShown (DVS.Vector Word16)) (BP.SimpleBalancedParens (DVS.Vector Word16))) where-  fromString = fromByteString . BSC.pack--instance IsString (JsonCursor BS.ByteString (BitShown (DVS.Vector Word32)) (BP.SimpleBalancedParens (DVS.Vector Word32))) where-  fromString = fromByteString . BSC.pack--instance IsString (JsonCursor BS.ByteString (BitShown (DVS.Vector Word64)) (BP.SimpleBalancedParens (DVS.Vector Word64))) where-  fromString = fromByteString . BSC.pack--instance IsString (JsonCursor BS.ByteString Poppy512 (BP.SimpleBalancedParens (DVS.Vector Word64))) where-  fromString = fromByteString . BSC.pack--instance FromForeignRegion (JsonCursor BS.ByteString (BitShown (DVS.Vector Word8)) (BP.SimpleBalancedParens (DVS.Vector Word8))) where-  fromForeignRegion (fptr, offset, size) = fromByteString (BSI.fromForeignPtr (castForeignPtr fptr) offset size)--instance FromForeignRegion (JsonCursor BS.ByteString (BitShown (DVS.Vector Word16)) (BP.SimpleBalancedParens (DVS.Vector Word16))) where-  fromForeignRegion (fptr, offset, size) = fromByteString (BSI.fromForeignPtr (castForeignPtr fptr) offset size)--instance FromForeignRegion (JsonCursor BS.ByteString (BitShown (DVS.Vector Word32)) (BP.SimpleBalancedParens (DVS.Vector Word32))) where-  fromForeignRegion (fptr, offset, size) = fromByteString (BSI.fromForeignPtr (castForeignPtr fptr) offset size)--instance FromForeignRegion (JsonCursor BS.ByteString (BitShown (DVS.Vector Word64)) (BP.SimpleBalancedParens (DVS.Vector Word64))) where-  fromForeignRegion (fptr, offset, size) = fromByteString (BSI.fromForeignPtr (castForeignPtr fptr) offset size)--instance FromForeignRegion (JsonCursor BS.ByteString Poppy512 (BP.SimpleBalancedParens (DVS.Vector Word64))) where-  fromForeignRegion (fptr, offset, size) = fromByteString (BSI.fromForeignPtr (castForeignPtr fptr) offset size)--instance (BP.BalancedParens u, Rank1 u, Rank0 u) => TreeCursor (JsonCursor t v u) where-  firstChild :: JsonCursor t v u -> Maybe (JsonCursor t v u)-  firstChild k = let mq = BP.firstChild (balancedParens k) (cursorRank k) in (\q -> k { cursorRank = q }) <$> mq--  nextSibling :: JsonCursor t v u -> Maybe (JsonCursor t v u)-  nextSibling k = (\q -> k { cursorRank = q }) <$> BP.nextSibling (balancedParens k) (cursorRank k)--  parent :: JsonCursor t v u -> Maybe (JsonCursor t v u)-  parent k = let mq = BP.parent (balancedParens k) (cursorRank k) in (\q -> k { cursorRank = q }) <$> mq--  depth :: JsonCursor t v u -> Maybe Count-  depth k = BP.depth (balancedParens k) (cursorRank k)--  subtreeSize :: JsonCursor t v u -> Maybe Count-  subtreeSize k = BP.subtreeSize (balancedParens k) (cursorRank k)--jsonCursorPos :: (Rank1 w, Select1 v) => JsonCursor s v w -> Position-jsonCursorPos k = toPosition (select1 ik (rank1 bpk (cursorRank k)) - 1)-  where ik  = interests k-        bpk = balancedParens k
src/HaskellWorks/Data/Json/Succinct/Cursor/Token.hs view
@@ -3,15 +3,15 @@   ( jsonTokenAt   ) where -import Data.ByteString.Internal                        as BSI+import Data.ByteString.Internal                  as BSI import HaskellWorks.Data.Bits.BitWise import HaskellWorks.Data.Drop-import HaskellWorks.Data.Json.Succinct.Cursor.Internal+import HaskellWorks.Data.Json.Cursor import HaskellWorks.Data.Json.Token.Tokenize import HaskellWorks.Data.Positioning import HaskellWorks.Data.RankSelect.Base.Rank1 import HaskellWorks.Data.RankSelect.Base.Select1-import Prelude                                         hiding (drop)+import Prelude                                   hiding (drop)  import qualified Data.Attoparsec.ByteString.Char8 as ABC 
src/HaskellWorks/Data/Json/Succinct/Index.hs view
@@ -11,15 +11,15 @@ import HaskellWorks.Data.Bits.BitWise import HaskellWorks.Data.Drop import HaskellWorks.Data.Json.CharLike+import HaskellWorks.Data.Json.Cursor import HaskellWorks.Data.Json.DecodeError-import HaskellWorks.Data.Json.Succinct.Cursor.Internal import HaskellWorks.Data.Positioning import HaskellWorks.Data.RankSelect.Base.Rank0 import HaskellWorks.Data.RankSelect.Base.Rank1 import HaskellWorks.Data.RankSelect.Base.Select1 import HaskellWorks.Data.TreeCursor import HaskellWorks.Data.Uncons-import Prelude                                         hiding (drop)+import Prelude                                   hiding (drop)  import qualified Data.ByteString                  as BS import qualified Data.List                        as L
src/HaskellWorks/Data/Json/Succinct/PartialIndex.hs view
@@ -11,14 +11,14 @@ import HaskellWorks.Data.Bits.BitWise import HaskellWorks.Data.Drop import HaskellWorks.Data.Json.CharLike-import HaskellWorks.Data.Json.Succinct.Cursor.Internal+import HaskellWorks.Data.Json.Cursor import HaskellWorks.Data.Positioning import HaskellWorks.Data.RankSelect.Base.Rank0 import HaskellWorks.Data.RankSelect.Base.Rank1 import HaskellWorks.Data.RankSelect.Base.Select1 import HaskellWorks.Data.TreeCursor import HaskellWorks.Data.Uncons-import Prelude                                         hiding (drop)+import Prelude                                   hiding (drop)  import qualified Data.ByteString                  as BS import qualified Data.List                        as L
src/HaskellWorks/Data/Json/Type.hs view
@@ -11,12 +11,12 @@ import Data.Word8 import HaskellWorks.Data.Bits.BitWise import HaskellWorks.Data.Drop-import HaskellWorks.Data.Json.Succinct.Cursor.Internal+import HaskellWorks.Data.Json.Cursor import HaskellWorks.Data.Positioning import HaskellWorks.Data.RankSelect.Base.Rank0 import HaskellWorks.Data.RankSelect.Base.Rank1 import HaskellWorks.Data.RankSelect.Base.Select1-import Prelude                                         hiding (drop)+import Prelude                                   hiding (drop)  import qualified Data.ByteString                  as BS import qualified HaskellWorks.Data.BalancedParens as BP
test/HaskellWorks/Data/Json/CorpusSpec.hs view
@@ -17,7 +17,7 @@ import HaskellWorks.Data.Bits.BitShown import HaskellWorks.Data.Bits.FromBitTextByteString import HaskellWorks.Data.FromByteString-import HaskellWorks.Data.Json.Succinct.Cursor.Internal+import HaskellWorks.Data.Json.Cursor import Test.Hspec  import qualified Data.ByteString      as BS
test/HaskellWorks/Data/Json/Succinct/CursorSpec.hs view
@@ -20,7 +20,7 @@ import HaskellWorks.Data.Bits.BitShown import HaskellWorks.Data.Bits.BitWise import HaskellWorks.Data.FromForeignRegion-import HaskellWorks.Data.Json.Succinct.Cursor.Internal+import HaskellWorks.Data.Json.Cursor import HaskellWorks.Data.Json.Succinct.Cursor.Token import HaskellWorks.Data.Json.Succinct.Index import HaskellWorks.Data.Json.Token
test/HaskellWorks/Data/Json/TypeSpec.hs view
@@ -19,7 +19,7 @@ import HaskellWorks.Data.Bits.BitShown import HaskellWorks.Data.Bits.BitWise import HaskellWorks.Data.FromForeignRegion-import HaskellWorks.Data.Json.Succinct.Cursor.Internal+import HaskellWorks.Data.Json.Cursor import HaskellWorks.Data.Json.Type import HaskellWorks.Data.RankSelect.Base.Rank0 import HaskellWorks.Data.RankSelect.Base.Rank1
test/HaskellWorks/Data/Json/ValueSpec.hs view
@@ -19,8 +19,8 @@ import HaskellWorks.Data.Bits.BitShown import HaskellWorks.Data.Bits.BitWise import HaskellWorks.Data.FromForeignRegion+import HaskellWorks.Data.Json.Cursor import HaskellWorks.Data.Json.DecodeError-import HaskellWorks.Data.Json.Succinct.Cursor.Internal import HaskellWorks.Data.Json.Succinct.Index import HaskellWorks.Data.Json.Value import HaskellWorks.Data.RankSelect.Base.Rank0