hw-json 0.5.0.0 → 0.6.0.0
raw patch · 31 files changed
+429/−414 lines, 31 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- hw-json.cabal +1/−1
- src/HaskellWorks/Data/Json.hs +4/−4
- src/HaskellWorks/Data/Json/Conduit.hs +17/−16
- src/HaskellWorks/Data/Json/Conduit/Blank.hs +8/−9
- src/HaskellWorks/Data/Json/Conduit/Words.hs +2/−2
- src/HaskellWorks/Data/Json/DecodeError.hs +1/−3
- src/HaskellWorks/Data/Json/LightJson.hs +71/−70
- src/HaskellWorks/Data/Json/Load.hs +6/−6
- src/HaskellWorks/Data/Json/LoadCursor.hs +6/−6
- src/HaskellWorks/Data/Json/PartialValue.hs +36/−36
- src/HaskellWorks/Data/Json/Succinct.hs +1/−1
- src/HaskellWorks/Data/Json/Succinct/Cursor.hs +2/−2
- src/HaskellWorks/Data/Json/Succinct/Cursor/BalancedParens.hs +10/−9
- src/HaskellWorks/Data/Json/Succinct/Cursor/BlankedJson.hs +6/−5
- src/HaskellWorks/Data/Json/Succinct/Cursor/InterestBits.hs +12/−11
- src/HaskellWorks/Data/Json/Succinct/Cursor/Internal.hs +21/−20
- src/HaskellWorks/Data/Json/Succinct/Cursor/Token.hs +11/−10
- src/HaskellWorks/Data/Json/Succinct/PartialIndex.hs +25/−24
- src/HaskellWorks/Data/Json/Token.hs +2/−2
- src/HaskellWorks/Data/Json/Token/Tokenize.hs +18/−17
- src/HaskellWorks/Data/Json/Type.hs +18/−17
- src/HaskellWorks/Data/Json/Value.hs +8/−8
- src/HaskellWorks/Data/Json/Value/Internal.hs +8/−7
- test/HaskellWorks/Data/Json/Conduit/BlankSpec.hs +5/−4
- test/HaskellWorks/Data/Json/CorpusSpec.hs +18/−18
- test/HaskellWorks/Data/Json/Succinct/Cursor/BalancedParensSpec.hs +9/−8
- test/HaskellWorks/Data/Json/Succinct/Cursor/InterestBitsSpec.hs +10/−9
- test/HaskellWorks/Data/Json/Succinct/CursorSpec.hs +29/−28
- test/HaskellWorks/Data/Json/Token/TokenizeSpec.hs +5/−4
- test/HaskellWorks/Data/Json/TypeSpec.hs +28/−27
- test/HaskellWorks/Data/Json/ValueSpec.hs +31/−30
hw-json.cabal view
@@ -1,5 +1,5 @@ name: hw-json-version: 0.5.0.0+version: 0.6.0.0 synopsis: Memory efficient JSON parser description: Please see README.md homepage: http://github.com/haskell-works/hw-json#readme
src/HaskellWorks/Data/Json.hs view
@@ -7,7 +7,7 @@ ( module X ) where -import HaskellWorks.Data.Json.Succinct as X-import HaskellWorks.Data.Json.Token as X-import HaskellWorks.Data.Json.Type as X-import HaskellWorks.Data.Json.Value as X+import HaskellWorks.Data.Json.Succinct as X+import HaskellWorks.Data.Json.Token as X+import HaskellWorks.Data.Json.Type as X+import HaskellWorks.Data.Json.Value as X
src/HaskellWorks/Data/Json/Conduit.hs view
@@ -10,17 +10,18 @@ , interestingWord8s ) where -import Control.Monad-import Data.Array.Unboxed as A-import qualified Data.Bits as BITS-import Data.ByteString as BS-import Data.Conduit-import Data.Int-import Data.Word-import Data.Word8-import HaskellWorks.Data.Bits.BitWise-import Prelude as P+import Control.Monad+import Data.Array.Unboxed as A+import Data.ByteString as BS+import Data.Conduit+import Data.Int+import Data.Word+import Data.Word8+import HaskellWorks.Data.Bits.BitWise+import Prelude as P +import qualified Data.Bits as BITS+ interestingWord8s :: A.UArray Word8 Word8 interestingWord8s = A.array (0, 255) [ (w, if w == _bracketleft || w == _braceleft || w == _parenleft || w == _t || w == _f || w == _n || w == _1@@ -79,7 +80,7 @@ d | d == _f -> yield True >> yield False d | d == _1 -> yield True >> yield False d | d == _n -> yield True >> yield False- _ -> return ()+ _ -> return () blankedJsonToBalancedParens' cs Nothing -> return () @@ -125,10 +126,10 @@ gen (Just False , bs) = Just (0x00, (Nothing, bs)) gen (Nothing , bs) = case BS.uncons bs of Just (c, cs) -> case balancedParensOf c of- MiniN -> gen (Nothing , cs)- MiniT -> Just (0xFF, (Nothing , cs))- MiniF -> Just (0x00, (Nothing , cs))- MiniTF -> Just (0xFF, (Just False , cs))+ MiniN -> gen (Nothing , cs)+ MiniT -> Just (0xFF, (Nothing , cs))+ MiniF -> Just (0x00, (Nothing , cs))+ MiniTF -> Just (0xFF, (Just False , cs)) Nothing -> Nothing data MiniBP = MiniN | MiniT | MiniF | MiniTF@@ -145,7 +146,7 @@ d | d == _f -> MiniTF d | d == _1 -> MiniTF d | d == _n -> MiniTF- _ -> MiniN+ _ -> MiniN yieldBitsOfWord8 :: Monad m => Word8 -> Conduit BS.ByteString m Bool yieldBitsOfWord8 w = do
src/HaskellWorks/Data/Json/Conduit/Blank.hs view
@@ -1,18 +1,17 @@ {-# LANGUAGE BangPatterns #-}-{-# LANGUAGE OverloadedStrings #-} module HaskellWorks.Data.Json.Conduit.Blank ( blankJson ) where -import Control.Monad-import Control.Monad.Trans.Resource (MonadThrow)-import Data.ByteString as BS-import Data.Conduit-import Data.Word-import Data.Word8-import HaskellWorks.Data.Json.Conduit.Words-import Prelude as P+import Control.Monad+import Control.Monad.Trans.Resource (MonadThrow)+import Data.ByteString as BS+import Data.Conduit+import Data.Word+import Data.Word8+import HaskellWorks.Data.Json.Conduit.Words+import Prelude as P data BlankState = Escaped
src/HaskellWorks/Data/Json/Conduit/Words.hs view
@@ -1,7 +1,7 @@ module HaskellWorks.Data.Json.Conduit.Words where -import Data.Word-import Data.Word8+import Data.Word+import Data.Word8 isLeadingDigit :: Word8 -> Bool isLeadingDigit w = w == _hyphen || (w >= _0 && w <= _9)
src/HaskellWorks/Data/Json/DecodeError.hs view
@@ -1,5 +1,3 @@-module HaskellWorks.Data.Json.DecodeError- ( DecodeError(..)- ) where+module HaskellWorks.Data.Json.DecodeError where newtype DecodeError = DecodeError String deriving (Eq, Show)
src/HaskellWorks/Data/Json/LightJson.hs view
@@ -1,43 +1,44 @@-{-# LANGUAGE BangPatterns #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE InstanceSigs #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE InstanceSigs #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE ScopedTypeVariables #-} module HaskellWorks.Data.Json.LightJson where -import Control.Arrow-import qualified Data.Attoparsec.ByteString.Char8 as ABC-import qualified Data.ByteString.Char8 as BSC-import qualified Data.ByteString as BS-import qualified Data.DList as DL-import qualified Data.List as L-import Data.String-import Data.Word-import Data.Word8-import HaskellWorks.Data.AtLeastSize-import HaskellWorks.Data.Bits.BitWise-import qualified HaskellWorks.Data.BalancedParens as BP-import HaskellWorks.Data.Drop-import HaskellWorks.Data.Entry-import HaskellWorks.Data.Json.CharLike-import HaskellWorks.Data.Json.Conduit.Words-import HaskellWorks.Data.Json.Succinct-import HaskellWorks.Data.Micro-import HaskellWorks.Data.Mini-import HaskellWorks.Data.MQuery-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.Row-import HaskellWorks.Data.TreeCursor-import HaskellWorks.Data.Uncons-import Prelude hiding (drop)-import Text.PrettyPrint.ANSI.Leijen+import Control.Arrow+import Data.String+import Data.Word+import Data.Word8+import HaskellWorks.Data.AtLeastSize+import HaskellWorks.Data.Bits.BitWise+import HaskellWorks.Data.Drop+import HaskellWorks.Data.Entry+import HaskellWorks.Data.Json.CharLike+import HaskellWorks.Data.Json.Conduit.Words+import HaskellWorks.Data.Json.Succinct+import HaskellWorks.Data.Micro+import HaskellWorks.Data.Mini+import HaskellWorks.Data.MQuery+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.Row+import HaskellWorks.Data.TreeCursor+import HaskellWorks.Data.Uncons+import Prelude hiding (drop)+import Text.PrettyPrint.ANSI.Leijen +import qualified Data.Attoparsec.ByteString.Char8 as ABC+import qualified Data.ByteString as BS+import qualified Data.ByteString.Char8 as BSC+import qualified Data.DList as DL+import qualified Data.List as L+import qualified HaskellWorks.Data.BalancedParens as BP+ data LightJson c = LightJsonString String | LightJsonNumber BS.ByteString@@ -49,11 +50,11 @@ deriving Show instance Eq (LightJson c) where- (==) (LightJsonString a) (LightJsonString b) = a == b- (==) (LightJsonNumber a) (LightJsonNumber b) = a == b- (==) (LightJsonBool a) (LightJsonBool b) = a == b- (==) LightJsonNull LightJsonNull = True- (==) _ _ = False+ (==) (LightJsonString a) (LightJsonString b) = a == b+ (==) (LightJsonNumber a) (LightJsonNumber b) = a == b+ (==) (LightJsonBool a) (LightJsonBool b) = a == b+ (==) LightJsonNull LightJsonNull = True+ (==) _ _ = False -- instance Ord (LightJson c) where -- compare (LightJsonString a) (LightJsonString b) = a `compare` b@@ -82,33 +83,33 @@ genString (InJson, cs) = case BS.uncons cs of Just (!e, !es) | e == _quotedbl -> genString (InString , es) -- TODO: Only match whitespace- Just (!_, !es) -> genString (InJson , es)- Nothing -> Nothing+ Just (!_, !es) -> genString (InJson , es)+ Nothing -> Nothing genString (InString, ds) = case BS.uncons ds of Just (!e, !es) | e == _backslash -> genString (Escaped , es) Just (!e, !_ ) | e == _quotedbl -> Nothing- Just (e , !es) -> Just (e , (InString , es))- Nothing -> Nothing+ Just (e , !es) -> Just (e , (InString , es))+ Nothing -> Nothing genString (Escaped, ds) = case BS.uncons ds of- Just (_ , !es) -> Just (_period , (InString , es))- Nothing -> Nothing+ Just (_ , !es) -> Just (_period , (InString , es))+ Nothing -> Nothing genString (_, _) = Nothing slurpString :: BS.ByteString -> String slurpString bs = L.unfoldr genString (InJson, BSC.unpack bs) where genString :: (JsonState, String) -> Maybe (Char, (JsonState, String)) genString (InJson, ds) = case ds of- (e:es) | e == '"' -> genString (InString , es)- (_:es) -> genString (InJson , es)- _ -> Nothing+ (e:es) | e == '"' -> genString (InString , es)+ (_:es) -> genString (InJson , es)+ _ -> Nothing genString (InString, ds) = case ds of (e:es) | e == '\\' -> genString (Escaped , es) (e:_ ) | e == '"' -> Nothing- (e:es) -> Just (e, (InString , es))- _ -> Nothing+ (e:es) -> Just (e, (InString , es))+ _ -> Nothing genString (Escaped, ds) = case ds of- (_:es) -> Just ('.', (InString , es))- _ -> Nothing+ (_:es) -> Just ('.', (InString , es))+ _ -> Nothing genString (_, _) = Nothing slurpNumber :: BS.ByteString -> BS.ByteString@@ -116,12 +117,12 @@ where genNumber :: (JsonState, BS.ByteString) -> Maybe (Word8, (JsonState, BS.ByteString)) genNumber (InJson, cs) = case BS.uncons cs of Just (!d, !ds) | isLeadingDigit d -> Just (d , (InNumber , ds))- Just (!d, !ds) -> Just (d , (InJson , ds))- Nothing -> Nothing+ Just (!d, !ds) -> Just (d , (InJson , ds))+ Nothing -> Nothing genNumber (InNumber, cs) = case BS.uncons cs of Just (!d, !ds) | isTrailingDigit d -> Just (d , (InNumber , ds)) Just (!d, !ds) | d == _quotedbl -> Just (_parenleft , (InString , ds))- _ -> Nothing+ _ -> Nothing genNumber (_, _) = Nothing instance (BP.BalancedParens w, Rank0 w, Rank1 w, Select1 v, TestBit w) => LightJsonAt (JsonCursor BS.ByteString v w) where@@ -133,8 +134,8 @@ Just (!c, _) | isChar_n c -> LightJsonNull Just (!c, _) | isBraceLeft c -> LightJsonObject (mapValuesFrom (firstChild k)) Just (!c, _) | isBracketLeft c -> LightJsonArray (arrayValuesFrom (firstChild k))- Just _ -> LightJsonError "Invalid Json Type"- Nothing -> LightJsonError "End of data"+ Just _ -> LightJsonError "Invalid Json Type"+ Nothing -> LightJsonError "End of data" where ik = interests k bpk = balancedParens k p = lastPositionOf (select1 ik (rank1 bpk (cursorRank k)))@@ -223,8 +224,8 @@ entry :: LightJsonAt c => LightJson c -> MQuery (Entry String (LightJson c)) entry jpv = case jpv of- LightJsonObject fs -> MQuery $ DL.fromList ((uncurry Entry . second lightJsonAt) `map` fs)- _ -> MQuery DL.empty+ LightJsonObject fs -> MQuery $ DL.fromList ((uncurry Entry . second lightJsonAt) `map` fs)+ _ -> MQuery DL.empty asString :: LightJson c -> MQuery String asString jpv = case jpv of@@ -236,9 +237,9 @@ LightJsonNumber sn -> case ABC.parse ABC.rational sn of ABC.Fail {} -> MQuery DL.empty ABC.Partial f -> case f " " of- ABC.Fail {} -> MQuery DL.empty- ABC.Partial _ -> MQuery DL.empty- ABC.Done _ r -> MQuery (DL.singleton r)+ ABC.Fail {} -> MQuery DL.empty+ ABC.Partial _ -> MQuery DL.empty+ ABC.Done _ r -> MQuery (DL.singleton r) ABC.Done _ r -> MQuery (DL.singleton r) _ -> MQuery DL.empty @@ -255,18 +256,18 @@ named :: String -> Entry String (LightJson c) -> MQuery (LightJson c) named fieldName (Entry fieldName' jpv) | fieldName == fieldName' = MQuery $ DL.singleton jpv-named _ _ = MQuery DL.empty+named _ _ = MQuery DL.empty jsonKeys :: LightJson c -> [String] jsonKeys jpv = case jpv of- LightJsonObject fs -> fst `map` fs- _ -> []+ LightJsonObject fs -> fst `map` fs+ _ -> [] hasKey :: String -> LightJson c -> Bool hasKey fieldName jpv = fieldName `elem` jsonKeys jpv jsonSize :: LightJson c -> MQuery Integer jsonSize jpv = case jpv of- LightJsonArray es -> MQuery (DL.singleton (fromIntegral (length es)))- LightJsonObject es -> MQuery (DL.singleton (fromIntegral (length es)))- _ -> MQuery (DL.singleton 0)+ LightJsonArray es -> MQuery (DL.singleton (fromIntegral (length es)))+ LightJsonObject es -> MQuery (DL.singleton (fromIntegral (length es)))+ _ -> MQuery (DL.singleton 0)
src/HaskellWorks/Data/Json/Load.hs view
@@ -1,6 +1,6 @@-{-# LANGUAGE BangPatterns #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE ScopedTypeVariables #-} module HaskellWorks.Data.Json.Load ( indexJson@@ -41,9 +41,9 @@ import System.IO 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 Data.ByteString as BS+import qualified Data.ByteString.Internal as BSI+import qualified Data.Vector.Storable as DVS -- | Write out a vector verbatim into an open file handle. hPutVector :: forall a. Storable a => Handle -> DVS.Vector a -> IO ()
src/HaskellWorks/Data/Json/LoadCursor.hs view
@@ -1,6 +1,6 @@-{-# LANGUAGE BangPatterns #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE ScopedTypeVariables #-} module HaskellWorks.Data.Json.LoadCursor ( indexJsonCursor@@ -37,9 +37,9 @@ import System.IO 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 Data.ByteString as BS+import qualified Data.ByteString.Internal as BSI+import qualified Data.Vector.Storable as DVS -- | Write out a vector verbatim into an open file handle. hPutVector :: forall a. Storable a => Handle -> DVS.Vector a -> IO ()
src/HaskellWorks/Data/Json/PartialValue.hs view
@@ -4,7 +4,6 @@ {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE TupleSections #-} module HaskellWorks.Data.Json.PartialValue ( JsonPartialValue(..)@@ -21,26 +20,27 @@ , named ) where -import Control.Arrow-import qualified Data.Attoparsec.ByteString.Char8 as ABC-import qualified Data.ByteString as BS-import qualified Data.DList as DL-import HaskellWorks.Data.AtLeastSize-import qualified HaskellWorks.Data.BalancedParens as BP-import HaskellWorks.Data.Bits.BitWise-import HaskellWorks.Data.Entry-import HaskellWorks.Data.Micro-import HaskellWorks.Data.Mini-import HaskellWorks.Data.MQuery-import HaskellWorks.Data.Json.Succinct.Cursor-import HaskellWorks.Data.Json.Succinct.PartialIndex-import HaskellWorks.Data.Json.Value.Internal-import HaskellWorks.Data.RankSelect.Base.Rank0-import HaskellWorks.Data.RankSelect.Base.Rank1-import HaskellWorks.Data.RankSelect.Base.Select1-import HaskellWorks.Data.Row-import Text.PrettyPrint.ANSI.Leijen+import Control.Arrow+import HaskellWorks.Data.AtLeastSize+import HaskellWorks.Data.Bits.BitWise+import HaskellWorks.Data.Entry+import HaskellWorks.Data.Json.Succinct.Cursor+import HaskellWorks.Data.Json.Succinct.PartialIndex+import HaskellWorks.Data.Json.Value.Internal+import HaskellWorks.Data.Micro+import HaskellWorks.Data.Mini+import HaskellWorks.Data.MQuery+import HaskellWorks.Data.RankSelect.Base.Rank0+import HaskellWorks.Data.RankSelect.Base.Rank1+import HaskellWorks.Data.RankSelect.Base.Select1+import HaskellWorks.Data.Row+import Text.PrettyPrint.ANSI.Leijen +import qualified Data.Attoparsec.ByteString.Char8 as ABC+import qualified Data.ByteString as BS+import qualified Data.DList as DL+import qualified HaskellWorks.Data.BalancedParens as BP+ data JsonPartialValue = JsonPartialString String | JsonPartialNumber Double@@ -64,15 +64,15 @@ instance JsonPartialValueAt JsonPartialIndex where jsonPartialJsonValueAt i = case i of JsonPartialIndexString s -> case ABC.parse parseJsonString s of- ABC.Fail {} -> JsonPartialError ("Invalid string: '" ++ show (BS.take 20 s) ++ "...'")- ABC.Partial _ -> JsonPartialError "Unexpected end of string"- ABC.Done _ r -> JsonPartialString r+ ABC.Fail {} -> JsonPartialError ("Invalid string: '" ++ show (BS.take 20 s) ++ "...'")+ ABC.Partial _ -> JsonPartialError "Unexpected end of string"+ ABC.Done _ r -> JsonPartialString r JsonPartialIndexNumber s -> case ABC.parse ABC.rational s of ABC.Fail {} -> JsonPartialError ("Invalid number: '" ++ show (BS.take 20 s) ++ "...'") ABC.Partial f -> case f " " of- ABC.Fail {} -> JsonPartialError ("Invalid number: '" ++ show (BS.take 20 s) ++ "...'")- ABC.Partial _ -> JsonPartialError "Unexpected end of number"- ABC.Done _ r -> JsonPartialNumber r+ ABC.Fail {} -> JsonPartialError ("Invalid number: '" ++ show (BS.take 20 s) ++ "...'")+ ABC.Partial _ -> JsonPartialError "Unexpected end of number"+ ABC.Done _ r -> JsonPartialNumber r ABC.Done _ r -> JsonPartialNumber r JsonPartialIndexObject fs -> JsonPartialObject (map ((jsonPartialValueString . parseString) *** jsonPartialJsonValueAt) fs) JsonPartialIndexArray es -> JsonPartialArray (map jsonPartialJsonValueAt es)@@ -152,8 +152,8 @@ pretty (MQuery das) = pretty (Row 120 das) hasKV :: String -> JsonPartialValue -> JsonPartialValue -> MQuery JsonPartialValue-hasKV k v (JsonPartialObject xs) = if (k, v) `elem` xs then MQuery (DL.singleton (JsonPartialObject xs)) else MQuery DL.empty-hasKV _ _ _ = MQuery DL.empty+hasKV k v (JsonPartialObject xs) = if (k, v) `elem` xs then MQuery (DL.singleton (JsonPartialObject xs)) else MQuery DL.empty+hasKV _ _ _ = MQuery DL.empty item :: JsonPartialValue -> MQuery JsonPartialValue item jpv = case jpv of@@ -162,8 +162,8 @@ entry :: JsonPartialValue -> MQuery (Entry String JsonPartialValue) entry jpv = case jpv of- JsonPartialObject fs -> MQuery $ DL.fromList (uncurry Entry `map` fs)- _ -> MQuery DL.empty+ JsonPartialObject fs -> MQuery $ DL.fromList (uncurry Entry `map` fs)+ _ -> MQuery DL.empty asString :: JsonPartialValue -> MQuery String asString jpv = case jpv of@@ -183,18 +183,18 @@ named :: String -> Entry String JsonPartialValue -> MQuery JsonPartialValue named fieldName (Entry fieldName' jpv) | fieldName == fieldName' = MQuery $ DL.singleton jpv-named _ _ = MQuery DL.empty+named _ _ = MQuery DL.empty jsonKeys :: JsonPartialValue -> [String] jsonKeys jpv = case jpv of- JsonPartialObject fs -> fst `map` fs- _ -> []+ JsonPartialObject fs -> fst `map` fs+ _ -> [] hasKey :: String -> JsonPartialValue -> Bool hasKey fieldName jpv = fieldName `elem` jsonKeys jpv jsonSize :: JsonPartialValue -> MQuery JsonPartialValue jsonSize jpv = case jpv of- JsonPartialArray es -> MQuery (DL.singleton (JsonPartialNumber (fromIntegral (length es))))- JsonPartialObject es -> MQuery (DL.singleton (JsonPartialNumber (fromIntegral (length es))))- _ -> MQuery (DL.singleton (JsonPartialNumber 0))+ JsonPartialArray es -> MQuery (DL.singleton (JsonPartialNumber (fromIntegral (length es))))+ JsonPartialObject es -> MQuery (DL.singleton (JsonPartialNumber (fromIntegral (length es))))+ _ -> MQuery (DL.singleton (JsonPartialNumber 0))
src/HaskellWorks/Data/Json/Succinct.hs view
@@ -2,4 +2,4 @@ ( module X ) where -import HaskellWorks.Data.Json.Succinct.Cursor as X+import HaskellWorks.Data.Json.Succinct.Cursor as X
src/HaskellWorks/Data/Json/Succinct/Cursor.hs view
@@ -3,5 +3,5 @@ ( module X ) where -import HaskellWorks.Data.Json.Succinct.Cursor.Internal as X-import HaskellWorks.Data.Json.Succinct.Cursor.Token as X+import HaskellWorks.Data.Json.Succinct.Cursor.Internal as X+import HaskellWorks.Data.Json.Succinct.Cursor.Token as X
src/HaskellWorks/Data/Json/Succinct/Cursor/BalancedParens.hs view
@@ -8,15 +8,16 @@ , getJsonBalancedParens ) where -import Control.Applicative-import qualified Data.ByteString as BS-import Data.Conduit-import qualified Data.Vector.Storable as DVS-import Data.Word-import HaskellWorks.Data.BalancedParens as BP-import HaskellWorks.Data.Conduit.List-import HaskellWorks.Data.Json.Conduit-import HaskellWorks.Data.Json.Succinct.Cursor.BlankedJson+import Control.Applicative+import Data.Conduit+import Data.Word+import HaskellWorks.Data.BalancedParens as BP+import HaskellWorks.Data.Conduit.List+import HaskellWorks.Data.Json.Conduit+import HaskellWorks.Data.Json.Succinct.Cursor.BlankedJson++import qualified Data.ByteString as BS+import qualified Data.Vector.Storable as DVS newtype JsonBalancedParens a = JsonBalancedParens a
src/HaskellWorks/Data/Json/Succinct/Cursor/BlankedJson.hs view
@@ -5,11 +5,12 @@ , getBlankedJson ) where -import qualified Data.ByteString as BS-import HaskellWorks.Data.ByteString-import HaskellWorks.Data.Conduit.List-import HaskellWorks.Data.FromByteString-import HaskellWorks.Data.Json.Conduit.Blank+import HaskellWorks.Data.ByteString+import HaskellWorks.Data.Conduit.List+import HaskellWorks.Data.FromByteString+import HaskellWorks.Data.Json.Conduit.Blank++import qualified Data.ByteString as BS newtype BlankedJson = BlankedJson [BS.ByteString] deriving (Eq, Show)
src/HaskellWorks/Data/Json/Succinct/Cursor/InterestBits.hs view
@@ -8,17 +8,18 @@ , getJsonInterestBits ) where -import Control.Applicative-import qualified Data.ByteString as BS-import Data.ByteString.Internal-import qualified Data.Vector.Storable as DVS-import Data.Word-import HaskellWorks.Data.Bits.BitShown-import HaskellWorks.Data.Conduit.List-import HaskellWorks.Data.FromByteString-import HaskellWorks.Data.Json.Conduit-import HaskellWorks.Data.Json.Succinct.Cursor.BlankedJson-import HaskellWorks.Data.RankSelect.Poppy512+import Control.Applicative+import Data.ByteString.Internal+import Data.Word+import HaskellWorks.Data.Bits.BitShown+import HaskellWorks.Data.Conduit.List+import HaskellWorks.Data.FromByteString+import HaskellWorks.Data.Json.Conduit+import HaskellWorks.Data.Json.Succinct.Cursor.BlankedJson+import HaskellWorks.Data.RankSelect.Poppy512++import qualified Data.ByteString as BS+import qualified Data.Vector.Storable as DVS newtype JsonInterestBits a = JsonInterestBits a
src/HaskellWorks/Data/Json/Succinct/Cursor/Internal.hs view
@@ -9,26 +9,27 @@ , jsonCursorPos ) where -import qualified Data.ByteString as BS-import qualified Data.ByteString.Char8 as BSC-import Data.ByteString.Internal as BSI-import Data.String-import qualified Data.Vector.Storable as DVS-import Data.Word-import Foreign.ForeignPtr-import qualified HaskellWorks.Data.BalancedParens as BP-import HaskellWorks.Data.Bits.BitShown-import HaskellWorks.Data.FromByteString-import HaskellWorks.Data.FromForeignRegion-import qualified HaskellWorks.Data.Json.Succinct.Cursor.BalancedParens as CBP-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 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
src/HaskellWorks/Data/Json/Succinct/Cursor/Token.hs view
@@ -3,16 +3,17 @@ ( jsonTokenAt ) where -import qualified Data.Attoparsec.ByteString.Char8 as ABC-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.Token.Tokenize-import HaskellWorks.Data.Positioning-import HaskellWorks.Data.RankSelect.Base.Rank1-import HaskellWorks.Data.RankSelect.Base.Select1-import Prelude hiding (drop)+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.Token.Tokenize+import HaskellWorks.Data.Positioning+import HaskellWorks.Data.RankSelect.Base.Rank1+import HaskellWorks.Data.RankSelect.Base.Select1+import Prelude hiding (drop)++import qualified Data.Attoparsec.ByteString.Char8 as ABC jsonTokenAt :: (Rank1 w, Select1 v, TestBit w) => JsonCursor ByteString v w -> Maybe (JsonToken String Double) jsonTokenAt k = if balancedParens k .?. lastPositionOf (cursorRank k)
src/HaskellWorks/Data/Json/Succinct/PartialIndex.hs view
@@ -1,28 +1,29 @@-{-# LANGUAGE BangPatterns #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE InstanceSigs #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE InstanceSigs #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE ScopedTypeVariables #-} module HaskellWorks.Data.Json.Succinct.PartialIndex where -import Control.Arrow-import qualified Data.ByteString as BS-import qualified Data.List as L-import qualified HaskellWorks.Data.BalancedParens as BP-import HaskellWorks.Data.Bits.BitWise-import HaskellWorks.Data.Drop-import HaskellWorks.Data.Json.CharLike-import HaskellWorks.Data.Json.Succinct-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 Control.Arrow+import HaskellWorks.Data.Bits.BitWise+import HaskellWorks.Data.Drop+import HaskellWorks.Data.Json.CharLike+import HaskellWorks.Data.Json.Succinct+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 qualified Data.ByteString as BS+import qualified Data.List as L+import qualified HaskellWorks.Data.BalancedParens as BP+ data JsonPartialIndex = JsonPartialIndexString BS.ByteString | JsonPartialIndexNumber BS.ByteString@@ -45,8 +46,8 @@ Just (!c, _) | isChar_n c -> JsonPartialIndexNull Just (!c, _) | isBraceLeft c -> JsonPartialIndexObject (mapValuesFrom (firstChild k)) Just (!c, _) | isBracketLeft c -> JsonPartialIndexArray (arrayValuesFrom (firstChild k))- Just _ -> JsonPartialIndexError "Invalid Json Type"- Nothing -> JsonPartialIndexError "End of data"+ Just _ -> JsonPartialIndexError "Invalid Json Type"+ Nothing -> JsonPartialIndexError "End of data" where ik = interests k bpk = balancedParens k p = lastPositionOf (select1 ik (rank1 bpk (cursorRank k)))@@ -58,4 +59,4 @@ pairwise _ = [] asField (a, b) = case a of JsonPartialIndexString s -> [(s, b)]- _ -> []+ _ -> []
src/HaskellWorks/Data/Json/Token.hs view
@@ -2,5 +2,5 @@ ( module X ) where -import HaskellWorks.Data.Json.Token.Types as X-import HaskellWorks.Data.Json.Token.Tokenize as X+import HaskellWorks.Data.Json.Token.Types as X+import HaskellWorks.Data.Json.Token.Tokenize as X
src/HaskellWorks/Data/Json/Token/Tokenize.hs view
@@ -1,8 +1,8 @@-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE TypeSynonymInstances #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TypeSynonymInstances #-} module HaskellWorks.Data.Json.Token.Tokenize ( IsChar(..)@@ -10,18 +10,19 @@ , ParseJson(..) ) where -import Control.Applicative-import qualified Data.Attoparsec.ByteString.Char8 as BC-import qualified Data.Attoparsec.Combinator as AC-import qualified Data.Attoparsec.Types as T-import qualified Data.ByteString as BS-import Data.Bits-import Data.Char-import Data.Word-import Data.Word8-import HaskellWorks.Data.Char.IsChar-import HaskellWorks.Data.Json.Token.Types-import HaskellWorks.Data.Parser as P+import Control.Applicative+import Data.Bits+import Data.Char+import Data.Word+import Data.Word8+import HaskellWorks.Data.Char.IsChar+import HaskellWorks.Data.Json.Token.Types+import HaskellWorks.Data.Parser as P++import qualified Data.Attoparsec.ByteString.Char8 as BC+import qualified Data.Attoparsec.Combinator as AC+import qualified Data.Attoparsec.Types as T+import qualified Data.ByteString as BS hexDigitNumeric :: P.Parser t => T.Parser t Int hexDigitNumeric = do
src/HaskellWorks/Data/Json/Type.hs view
@@ -1,25 +1,26 @@-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE InstanceSigs #-}-{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE InstanceSigs #-}+{-# LANGUAGE MultiParamTypeClasses #-} module HaskellWorks.Data.Json.Type ( JsonType(..) , JsonTypeAt(..) ) where -import qualified Data.ByteString as BS-import Data.Char-import Data.Word8-import qualified HaskellWorks.Data.BalancedParens as BP-import HaskellWorks.Data.Bits.BitWise-import HaskellWorks.Data.Drop-import HaskellWorks.Data.Json.Succinct-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 Data.Char+import Data.Word8+import HaskellWorks.Data.Bits.BitWise+import HaskellWorks.Data.Drop+import HaskellWorks.Data.Json.Succinct+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 qualified Data.ByteString as BS+import qualified HaskellWorks.Data.BalancedParens as BP+ {-# ANN module ("HLint: Reduce duplication" :: String) #-} wIsJsonNumberDigit :: Word8 -> Bool@@ -47,7 +48,7 @@ c:_ | wIsJsonNumberDigit (fromIntegral (ord c)) -> Just JsonTypeNumber c:_ | fromIntegral (ord c) == _braceleft -> Just JsonTypeObject c:_ | fromIntegral (ord c) == _quotedbl -> Just JsonTypeString- _ -> Nothing+ _ -> Nothing jsonTypeAt k = jsonTypeAtPosition p k where p = lastPositionOf (select1 ik (rank1 bpk (cursorRank k)))@@ -63,7 +64,7 @@ Just (c, _) | wIsJsonNumberDigit c -> Just JsonTypeNumber Just (c, _) | c == _braceleft -> Just JsonTypeObject Just (c, _) | c == _quotedbl -> Just JsonTypeString- _ -> Nothing+ _ -> Nothing jsonTypeAt k = jsonTypeAtPosition p k where p = lastPositionOf (select1 ik (rank1 bpk (cursorRank k)))
src/HaskellWorks/Data/Json/Value.hs view
@@ -10,8 +10,8 @@ import HaskellWorks.Data.Json.Succinct.Index import HaskellWorks.Data.Json.Value.Internal -import qualified Data.Attoparsec.ByteString.Char8 as ABC-import qualified Data.ByteString as BS+import qualified Data.Attoparsec.ByteString.Char8 as ABC+import qualified Data.ByteString as BS data JsonValue = JsonString String@@ -28,15 +28,15 @@ instance JsonValueAt JsonIndex where jsonValueAt i = case i of JsonIndexString s -> case ABC.parse parseJsonString s of- ABC.Fail {} -> Left (DecodeError ("Invalid string: '" ++ show (BS.take 20 s) ++ "...'"))- ABC.Partial _ -> Left (DecodeError "Unexpected end of string")- ABC.Done _ r -> Right (JsonString r)+ ABC.Fail {} -> Left (DecodeError ("Invalid string: '" ++ show (BS.take 20 s) ++ "...'"))+ ABC.Partial _ -> Left (DecodeError "Unexpected end of string")+ ABC.Done _ r -> Right (JsonString r) JsonIndexNumber s -> case ABC.parse ABC.rational s of ABC.Fail {} -> Left (DecodeError ("Invalid number: '" ++ show (BS.take 20 s) ++ "...'")) ABC.Partial f -> case f " " of- ABC.Fail {} -> Left (DecodeError ("Invalid number: '" ++ show (BS.take 20 s) ++ "...'"))- ABC.Partial _ -> Left (DecodeError "Unexpected end of number")- ABC.Done _ r -> Right (JsonNumber r)+ ABC.Fail {} -> Left (DecodeError ("Invalid number: '" ++ show (BS.take 20 s) ++ "...'"))+ ABC.Partial _ -> Left (DecodeError "Unexpected end of number")+ ABC.Done _ r -> Right (JsonNumber r) ABC.Done _ r -> Right (JsonNumber r) JsonIndexObject fs -> JsonObject <$> mapM (\f -> (,) <$> parseString (fst f) <*> jsonValueAt (snd f)) fs JsonIndexArray es -> JsonArray <$> mapM jsonValueAt es
src/HaskellWorks/Data/Json/Value/Internal.hs view
@@ -7,13 +7,14 @@ module HaskellWorks.Data.Json.Value.Internal where -import Control.Applicative-import qualified Data.Attoparsec.ByteString.Char8 as ABC-import qualified Data.Attoparsec.Types as T-import Data.Bits-import Data.Char-import Data.String-import HaskellWorks.Data.Parser as P+import Control.Applicative+import Data.Bits+import Data.Char+import Data.String+import HaskellWorks.Data.Parser as P++import qualified Data.Attoparsec.ByteString.Char8 as ABC+import qualified Data.Attoparsec.Types as T parseHexDigitNumeric :: P.Parser t => T.Parser t Int parseHexDigitNumeric = do
test/HaskellWorks/Data/Json/Conduit/BlankSpec.hs view
@@ -2,10 +2,11 @@ module HaskellWorks.Data.Json.Conduit.BlankSpec (spec) where -import qualified Data.ByteString as BS-import HaskellWorks.Data.Json.Conduit.Blank-import HaskellWorks.Data.Conduit.List-import Test.Hspec+import HaskellWorks.Data.Conduit.List+import HaskellWorks.Data.Json.Conduit.Blank+import Test.Hspec++import qualified Data.ByteString as BS {-# ANN module ("HLint: ignore Redundant do" :: String) #-}
test/HaskellWorks/Data/Json/CorpusSpec.hs view
@@ -1,27 +1,27 @@-{-# LANGUAGE BangPatterns #-}-{-# LANGUAGE ExplicitForAll #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE InstanceSigs #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE NoMonomorphismRestriction #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE ExplicitForAll #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE InstanceSigs #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE NoMonomorphismRestriction #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE ScopedTypeVariables #-} {-# OPTIONS_GHC -fno-warn-missing-signatures #-} module HaskellWorks.Data.Json.CorpusSpec(spec) where -import qualified Data.ByteString as BS-import qualified Data.Vector.Storable as DVS-import Data.Word-import HaskellWorks.Data.BalancedParens.Simple-import HaskellWorks.Data.Bits.BitShown-import HaskellWorks.Data.Bits.FromBitTextByteString-import HaskellWorks.Data.Json.Succinct.Cursor as C-import Test.Hspec+import Data.Word+import HaskellWorks.Data.BalancedParens.Simple+import HaskellWorks.Data.Bits.BitShown+import HaskellWorks.Data.Bits.FromBitTextByteString+import HaskellWorks.Data.FromByteString+import HaskellWorks.Data.Json.Succinct.Cursor as C+import Test.Hspec -import HaskellWorks.Data.FromByteString+import qualified Data.ByteString as BS+import qualified Data.Vector.Storable as DVS {-# ANN module ("HLint: ignore Redundant do" :: String) #-} {-# ANN module ("HLint: ignore Reduce duplication" :: String) #-}
test/HaskellWorks/Data/Json/Succinct/Cursor/BalancedParensSpec.hs view
@@ -3,14 +3,15 @@ module HaskellWorks.Data.Json.Succinct.Cursor.BalancedParensSpec(spec) where -import qualified Data.ByteString as BS-import Data.Conduit-import Data.String-import HaskellWorks.Data.Bits.BitShown-import HaskellWorks.Data.Conduit.List-import HaskellWorks.Data.Json.Conduit-import HaskellWorks.Data.Json.Succinct.Cursor.BlankedJson-import Test.Hspec+import Data.Conduit+import Data.String+import HaskellWorks.Data.Bits.BitShown+import HaskellWorks.Data.Conduit.List+import HaskellWorks.Data.Json.Conduit+import HaskellWorks.Data.Json.Succinct.Cursor.BlankedJson+import Test.Hspec++import qualified Data.ByteString as BS {-# ANN module ("HLint: Ignore Redundant do" :: String) #-}
test/HaskellWorks/Data/Json/Succinct/Cursor/InterestBitsSpec.hs view
@@ -4,15 +4,16 @@ module HaskellWorks.Data.Json.Succinct.Cursor.InterestBitsSpec(spec) where -import qualified Data.ByteString as BS-import Data.String-import qualified Data.Vector.Storable as DVS-import Data.Word-import HaskellWorks.Data.Bits.BitShown-import HaskellWorks.Data.FromByteString-import HaskellWorks.Data.Json.Succinct.Cursor.BlankedJson-import HaskellWorks.Data.Json.Succinct.Cursor.InterestBits-import Test.Hspec+import Data.String+import Data.Word+import HaskellWorks.Data.Bits.BitShown+import HaskellWorks.Data.FromByteString+import HaskellWorks.Data.Json.Succinct.Cursor.BlankedJson+import HaskellWorks.Data.Json.Succinct.Cursor.InterestBits+import Test.Hspec++import qualified Data.ByteString as BS+import qualified Data.Vector.Storable as DVS {-# ANN module ("HLint: ignore Redundant do" :: String) #-}
test/HaskellWorks/Data/Json/Succinct/CursorSpec.hs view
@@ -1,36 +1,37 @@-{-# LANGUAGE ExplicitForAll #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE InstanceSigs #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE NoMonomorphismRestriction #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE ExplicitForAll #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE InstanceSigs #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE NoMonomorphismRestriction #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE ScopedTypeVariables #-} {-# OPTIONS_GHC -fno-warn-missing-signatures #-} module HaskellWorks.Data.Json.Succinct.CursorSpec(spec) where -import Control.Monad-import qualified Data.ByteString as BS-import Data.String-import qualified Data.Vector.Storable as DVS-import Data.Word-import HaskellWorks.Data.BalancedParens.BalancedParens-import HaskellWorks.Data.BalancedParens.Simple-import HaskellWorks.Data.Bits.BitShow-import HaskellWorks.Data.Bits.BitShown-import HaskellWorks.Data.Bits.BitWise-import HaskellWorks.Data.FromForeignRegion-import HaskellWorks.Data.Json.Succinct.Cursor as C-import HaskellWorks.Data.Json.Succinct.Index-import HaskellWorks.Data.Json.Token-import HaskellWorks.Data.RankSelect.Base.Rank0-import HaskellWorks.Data.RankSelect.Base.Rank1-import HaskellWorks.Data.RankSelect.Base.Select1-import HaskellWorks.Data.RankSelect.Poppy512-import qualified HaskellWorks.Data.TreeCursor as TC-import Test.Hspec+import Control.Monad+import Data.String+import Data.Word+import HaskellWorks.Data.BalancedParens.BalancedParens+import HaskellWorks.Data.BalancedParens.Simple+import HaskellWorks.Data.Bits.BitShow+import HaskellWorks.Data.Bits.BitShown+import HaskellWorks.Data.Bits.BitWise+import HaskellWorks.Data.FromForeignRegion+import HaskellWorks.Data.Json.Succinct.Cursor as C+import HaskellWorks.Data.Json.Succinct.Index+import HaskellWorks.Data.Json.Token+import HaskellWorks.Data.RankSelect.Base.Rank0+import HaskellWorks.Data.RankSelect.Base.Rank1+import HaskellWorks.Data.RankSelect.Base.Select1+import HaskellWorks.Data.RankSelect.Poppy512+import Test.Hspec++import qualified Data.ByteString as BS+import qualified Data.Vector.Storable as DVS+import qualified HaskellWorks.Data.TreeCursor as TC {-# ANN module ("HLint: ignore Redundant do" :: String) #-} {-# ANN module ("HLint: ignore Reduce duplication" :: String) #-}
test/HaskellWorks/Data/Json/Token/TokenizeSpec.hs view
@@ -2,10 +2,11 @@ module HaskellWorks.Data.Json.Token.TokenizeSpec (spec) where -import qualified Data.Attoparsec.ByteString.Char8 as BC-import Data.ByteString as BS-import HaskellWorks.Data.Json.Token.Tokenize-import Test.Hspec+import Data.ByteString as BS+import HaskellWorks.Data.Json.Token.Tokenize+import Test.Hspec++import qualified Data.Attoparsec.ByteString.Char8 as BC {-# ANN module ("HLint: ignore Redundant do" :: String) #-}
test/HaskellWorks/Data/Json/TypeSpec.hs view
@@ -1,35 +1,36 @@-{-# LANGUAGE ExplicitForAll #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE InstanceSigs #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE NoMonomorphismRestriction #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE ExplicitForAll #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE InstanceSigs #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE NoMonomorphismRestriction #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE ScopedTypeVariables #-} {-# OPTIONS_GHC -fno-warn-missing-signatures #-} module HaskellWorks.Data.Json.TypeSpec (spec) where -import Control.Monad-import qualified Data.ByteString as BS-import Data.String-import qualified Data.Vector.Storable as DVS-import Data.Word-import HaskellWorks.Data.BalancedParens.BalancedParens-import HaskellWorks.Data.BalancedParens.Simple-import HaskellWorks.Data.Bits.BitShown-import HaskellWorks.Data.Bits.BitWise-import HaskellWorks.Data.FromForeignRegion-import HaskellWorks.Data.Json.Succinct.Cursor as C-import HaskellWorks.Data.Json.Succinct.Index-import HaskellWorks.Data.Json.Type-import HaskellWorks.Data.RankSelect.Base.Rank0-import HaskellWorks.Data.RankSelect.Base.Rank1-import HaskellWorks.Data.RankSelect.Base.Select1-import HaskellWorks.Data.RankSelect.Poppy512-import qualified HaskellWorks.Data.TreeCursor as TC-import Test.Hspec+import Control.Monad+import Data.String+import Data.Word+import HaskellWorks.Data.BalancedParens.BalancedParens+import HaskellWorks.Data.BalancedParens.Simple+import HaskellWorks.Data.Bits.BitShown+import HaskellWorks.Data.Bits.BitWise+import HaskellWorks.Data.FromForeignRegion+import HaskellWorks.Data.Json.Succinct.Cursor as C+import HaskellWorks.Data.Json.Succinct.Index+import HaskellWorks.Data.Json.Type+import HaskellWorks.Data.RankSelect.Base.Rank0+import HaskellWorks.Data.RankSelect.Base.Rank1+import HaskellWorks.Data.RankSelect.Base.Select1+import HaskellWorks.Data.RankSelect.Poppy512+import Test.Hspec++import qualified Data.ByteString as BS+import qualified Data.Vector.Storable as DVS+import qualified HaskellWorks.Data.TreeCursor as TC {-# ANN module ("HLint: ignore Redundant do" :: String) #-} {-# ANN module ("HLint: ignore Reduce duplication" :: String) #-}
test/HaskellWorks/Data/Json/ValueSpec.hs view
@@ -1,37 +1,38 @@-{-# LANGUAGE ExplicitForAll #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE InstanceSigs #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE NoMonomorphismRestriction #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE ExplicitForAll #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE InstanceSigs #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE NoMonomorphismRestriction #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE ScopedTypeVariables #-} {-# OPTIONS_GHC -fno-warn-missing-signatures #-} module HaskellWorks.Data.Json.ValueSpec (spec) where -import Control.Monad-import qualified Data.ByteString as BS-import Data.String-import qualified Data.Vector.Storable as DVS-import Data.Word-import HaskellWorks.Data.BalancedParens.BalancedParens-import HaskellWorks.Data.BalancedParens.Simple-import HaskellWorks.Data.Bits.BitShown-import HaskellWorks.Data.Bits.BitWise-import HaskellWorks.Data.FromForeignRegion-import HaskellWorks.Data.Json.DecodeError-import HaskellWorks.Data.Json.Succinct.Cursor as C-import HaskellWorks.Data.Json.Succinct.Index-import HaskellWorks.Data.Json.Value-import HaskellWorks.Data.RankSelect.Base.Rank0-import HaskellWorks.Data.RankSelect.Base.Rank1-import HaskellWorks.Data.RankSelect.Base.Select1-import HaskellWorks.Data.RankSelect.Poppy512-import qualified HaskellWorks.Data.TreeCursor as TC-import Test.Hspec+import Control.Monad+import Data.String+import Data.Word+import HaskellWorks.Data.BalancedParens.BalancedParens+import HaskellWorks.Data.BalancedParens.Simple+import HaskellWorks.Data.Bits.BitShown+import HaskellWorks.Data.Bits.BitWise+import HaskellWorks.Data.FromForeignRegion+import HaskellWorks.Data.Json.DecodeError+import HaskellWorks.Data.Json.Succinct.Cursor as C+import HaskellWorks.Data.Json.Succinct.Index+import HaskellWorks.Data.Json.Value+import HaskellWorks.Data.RankSelect.Base.Rank0+import HaskellWorks.Data.RankSelect.Base.Rank1+import HaskellWorks.Data.RankSelect.Base.Select1+import HaskellWorks.Data.RankSelect.Poppy512+import Test.Hspec +import qualified Data.ByteString as BS+import qualified Data.Vector.Storable as DVS+import qualified HaskellWorks.Data.TreeCursor as TC+ {-# ANN module ("HLint: ignore Redundant do" :: String) #-} {-# ANN module ("HLint: ignore Reduce duplication" :: String) #-} {-# ANN module ("HLint: redundant bracket" :: String) #-}@@ -51,8 +52,8 @@ jsonValueVia :: JsonIndexAt (JsonCursor BS.ByteString t u) => Maybe (JsonCursor BS.ByteString t u) -> Either DecodeError JsonValue jsonValueVia mk = case mk of- Just k -> (jsonIndexAt >=> jsonValueAt) k- Nothing -> Left (DecodeError "No such element")+ Just k -> (jsonIndexAt >=> jsonValueAt) k+ Nothing -> Left (DecodeError "No such element") genSpec :: forall t u. ( Eq t