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 +1/−1
- bench/Main.hs +41/−23
- hw-json.cabal +55/−54
- src/HaskellWorks/Data/Json/Cursor.hs +113/−0
- src/HaskellWorks/Data/Json/LightJson.hs +2/−2
- src/HaskellWorks/Data/Json/Load.hs +1/−1
- src/HaskellWorks/Data/Json/LoadCursor.hs +1/−1
- src/HaskellWorks/Data/Json/PartialValue.hs +1/−1
- src/HaskellWorks/Data/Json/Succinct/Cursor/Internal.hs +0/−113
- src/HaskellWorks/Data/Json/Succinct/Cursor/Token.hs +3/−3
- src/HaskellWorks/Data/Json/Succinct/Index.hs +2/−2
- src/HaskellWorks/Data/Json/Succinct/PartialIndex.hs +2/−2
- src/HaskellWorks/Data/Json/Type.hs +2/−2
- test/HaskellWorks/Data/Json/CorpusSpec.hs +1/−1
- test/HaskellWorks/Data/Json/Succinct/CursorSpec.hs +1/−1
- test/HaskellWorks/Data/Json/TypeSpec.hs +1/−1
- test/HaskellWorks/Data/Json/ValueSpec.hs +1/−1
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