{-# LANGUAGE BangPatterns #-}{-# LANGUAGE OverloadedStrings #-}{-# LANGUAGE ScopedTypeVariables #-}{-# LANGUAGE ViewPatterns #-}{-# OPTIONS_GHC -O2 #-}-- | Parser from strict 'ByteString' to 'Tokens'.moduleData.Aeson.Decoding.ByteString(bsToTokens ,)whereimportData.ByteString(ByteString)importData.Char(chr)importData.Integer.Conversion(byteStringToInteger)importData.Text(Text)importData.Word(Word8)importqualifiedData.Aeson.Key asKeyimportqualifiedData.ByteStringasBSimportqualifiedData.ByteString.UnsafeasBS.UnsafeimportqualifiedData.ScientificasSciimportqualifiedData.Word8.PatternsasW8importData.Aeson.Decoding.Internal importData.Aeson.Decoding.Tokens importData.Aeson.Internal.Text (unsafeDecodeASCII )importData.Aeson.Internal.Unescape (unescapeText )-- | Lex (and parse) strict 'ByteString' into 'Tokens' stream.---- @since 2.1.2.0--bsToTokens ::ByteString->Tokens ByteStringStringbsToTokens :: ByteString -> Tokens ByteString String
bsToTokens ByteString
bs0 =Parser Tokens ByteString
forall k. Parser Tokens k
goT ByteString
bs0 ByteString -> ByteString
forall a. a -> a
idwheregoT ::Parser Tokens k goT :: forall k. Parser Tokens k
goT (ByteString -> ByteString
skipSpace ->ByteString
bs )ByteString -> k
k =caseByteString -> Maybe (Word8, ByteString)
BS.unconsByteString
bs ofMaybe (Word8, ByteString)
Nothing->String -> Tokens k String
forall e k. e -> Tokens k e
forall (t :: * -> * -> *) e k. AsError t => e -> t k e
tkErr String
"Unexpected end-of-input, expecting JSON value"Just(!Word8
w ,!ByteString
bs1 )->Word8
-> ByteString -> ByteString -> (ByteString -> k) -> Tokens k String
forall k.
Word8
-> ByteString -> ByteString -> (ByteString -> k) -> Tokens k String
tokenCase Word8
w ByteString
bs1 ByteString
bs ByteString -> k
k tokenCase ::Word8-- head->ByteString-- tail->ByteString-- whole input, needed for number parsing->(ByteString->k )-- continuation->Tokens k StringtokenCase :: forall k.
Word8
-> ByteString -> ByteString -> (ByteString -> k) -> Tokens k String
tokenCase Word8
W8.LEFT_CURLY!ByteString
bs !ByteString
_ByteString -> k
k =TkRecord k String -> Tokens k String
forall k e. TkRecord k e -> Tokens k e
TkRecordOpen (Parser TkRecord k
forall k. Parser TkRecord k
goR ByteString
bs ByteString -> k
k )tokenCase Word8
W8.LEFT_SQUAREByteString
bs ByteString
_ByteString -> k
k =TkArray k String -> Tokens k String
forall k e. TkArray k e -> Tokens k e
TkArrayOpen (Parser TkArray k
forall k. Parser TkArray k
goA ByteString
bs ByteString -> k
k )tokenCase Word8
W8.DOUBLE_QUOTEByteString
bs ByteString
_ByteString -> k
k =(Text -> ByteString -> Tokens k String)
-> (String -> Tokens k String) -> ByteString -> Tokens k String
forall r.
(Text -> ByteString -> r) -> (String -> r) -> ByteString -> r
scanStringLiteral (\Text
t ByteString
bs' ->Text -> k -> Tokens k String
forall k e. Text -> k -> Tokens k e
TkText Text
t (ByteString -> k
k ByteString
bs' ))String -> Tokens k String
forall e k. e -> Tokens k e
forall (t :: * -> * -> *) e k. AsError t => e -> t k e
tkErr ByteString
bs tokenCase Word8
W8.HYPHENByteString
bs ByteString
_ByteString -> k
k =(Number -> ByteString -> Tokens k String)
-> (String -> Tokens k String) -> ByteString -> Tokens k String
forall r.
(Number -> ByteString -> r) -> (String -> r) -> ByteString -> r
scanNumberLiteral (\Number
n ByteString
bs' ->Number -> k -> Tokens k String
forall k e. Number -> k -> Tokens k e
TkNumber (Number -> Number
negateNumber Number
n )(ByteString -> k
k ByteString
bs' ))String -> Tokens k String
forall e k. e -> Tokens k e
forall (t :: * -> * -> *) e k. AsError t => e -> t k e
tkErr ByteString
bs tokenCase Word8
w ByteString
_ByteString
wbs ByteString -> k
k |Word8
W8.DIGIT_0Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
<=Word8
w ,Word8
w Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
<=Word8
W8.DIGIT_9=(Number -> ByteString -> Tokens k String)
-> (String -> Tokens k String) -> ByteString -> Tokens k String
forall r.
(Number -> ByteString -> r) -> (String -> r) -> ByteString -> r
scanNumberLiteral (\Number
n ByteString
bs' ->Number -> k -> Tokens k String
forall k e. Number -> k -> Tokens k e
TkNumber Number
n (ByteString -> k
k ByteString
bs' ))String -> Tokens k String
forall e k. e -> Tokens k e
forall (t :: * -> * -> *) e k. AsError t => e -> t k e
tkErr ByteString
wbs tokenCase Word8
W8.LOWER_NByteString
bs ByteString
_ByteString -> k
k |JustByteString
bs1 <-ByteString -> Int -> ByteString -> Maybe ByteString
stripPrefix ByteString
"ull"Int
3ByteString
bs =Lit -> k -> Tokens k String
forall k e. Lit -> k -> Tokens k e
TkLit Lit
LitNull (ByteString -> k
k ByteString
bs1 )tokenCase Word8
W8.LOWER_TByteString
bs ByteString
_ByteString -> k
k |JustByteString
bs1 <-ByteString -> Int -> ByteString -> Maybe ByteString
stripPrefix ByteString
"rue"Int
3ByteString
bs =Lit -> k -> Tokens k String
forall k e. Lit -> k -> Tokens k e
TkLit Lit
LitTrue (ByteString -> k
k ByteString
bs1 )tokenCase Word8
W8.LOWER_FByteString
bs ByteString
_ByteString -> k
k |JustByteString
bs1 <-ByteString -> Int -> ByteString -> Maybe ByteString
stripPrefix ByteString
"alse"Int
4ByteString
bs =Lit -> k -> Tokens k String
forall k e. Lit -> k -> Tokens k e
TkLit Lit
LitFalse (ByteString -> k
k ByteString
bs1 )tokenCase Word8
_ByteString
_ByteString
wbs ByteString -> k
_=String -> Tokens k String
forall e k. e -> Tokens k e
forall (t :: * -> * -> *) e k. AsError t => e -> t k e
tkErr (String -> Tokens k String) -> String -> Tokens k String
forall a b. (a -> b) -> a -> b
$String
"Unexpected "String -> String -> String
forall a. [a] -> [a] -> [a]
++ByteString -> String
showBeginning ByteString
wbs String -> String -> String
forall a. [a] -> [a] -> [a]
++String
", expecting JSON value"-- ArraygoA ::Parser TkArray k goA :: forall k. Parser TkArray k
goA (ByteString -> ByteString
skipSpace ->ByteString
bs )ByteString -> k
k =caseByteString -> Maybe (Word8, ByteString)
BS.unconsByteString
bs ofMaybe (Word8, ByteString)
Nothing->String -> TkArray k String
forall (t :: * -> * -> *) k. AsError t => String -> t k String
tkErrEOF String
"JSON value or ]"Just(Word8
W8.RIGHT_SQUARE,!ByteString
bs1 )->k -> TkArray k String
forall k e. k -> TkArray k e
TkArrayEnd (ByteString -> k
k ByteString
bs1 )Just(Word8
w ,!ByteString
bs1 )->Tokens (TkArray k String) String -> TkArray k String
forall k e. Tokens (TkArray k e) e -> TkArray k e
TkItem (Tokens (TkArray k String) String -> TkArray k String)
-> Tokens (TkArray k String) String -> TkArray k String
forall a b. (a -> b) -> a -> b
$Word8
-> ByteString
-> ByteString
-> (ByteString -> TkArray k String)
-> Tokens (TkArray k String) String
forall k.
Word8
-> ByteString -> ByteString -> (ByteString -> k) -> Tokens k String
tokenCase Word8
w ByteString
bs1 ByteString
bs ((ByteString -> TkArray k String)
 -> Tokens (TkArray k String) String)
-> (ByteString -> TkArray k String)
-> Tokens (TkArray k String) String
forall a b. (a -> b) -> a -> b
$\ByteString
bs2 ->Parser TkArray k
forall k. Parser TkArray k
goA1 ByteString
bs2 ByteString -> k
k goA1 ::Parser TkArray k goA1 :: forall k. Parser TkArray k
goA1 (ByteString -> ByteString
skipSpace ->ByteString
bs )ByteString -> k
k =caseByteString -> Maybe (Word8, ByteString)
BS.unconsByteString
bs ofMaybe (Word8, ByteString)
Nothing->String -> TkArray k String
forall (t :: * -> * -> *) k. AsError t => String -> t k String
tkErrEOF String
", or ]"Just(Word8
W8.RIGHT_SQUARE,!ByteString
bs1 )->k -> TkArray k String
forall k e. k -> TkArray k e
TkArrayEnd (ByteString -> k
k ByteString
bs1 )Just(Word8
W8.COMMA,!ByteString
bs1 )->Tokens (TkArray k String) String -> TkArray k String
forall k e. Tokens (TkArray k e) e -> TkArray k e
TkItem (Tokens (TkArray k String) String -> TkArray k String)
-> Tokens (TkArray k String) String -> TkArray k String
forall a b. (a -> b) -> a -> b
$Parser Tokens (TkArray k String)
forall k. Parser Tokens k
goT ByteString
bs1 ((ByteString -> TkArray k String)
 -> Tokens (TkArray k String) String)
-> (ByteString -> TkArray k String)
-> Tokens (TkArray k String) String
forall a b. (a -> b) -> a -> b
$\ByteString
bs2 ->Parser TkArray k
forall k. Parser TkArray k
goA1 ByteString
bs2 ByteString -> k
k Maybe (Word8, ByteString)
_->ByteString -> String -> TkArray k String
forall (t :: * -> * -> *) k.
AsError t =>
ByteString -> String -> t k String
tkErrBS ByteString
bs String
", or ]"-- RecordgoR ::Parser TkRecord k goR :: forall k. Parser TkRecord k
goR (ByteString -> ByteString
skipSpace ->ByteString
bs )ByteString -> k
k =caseByteString -> Maybe (Word8, ByteString)
BS.unconsByteString
bs ofMaybe (Word8, ByteString)
Nothing->String -> TkRecord k String
forall (t :: * -> * -> *) k. AsError t => String -> t k String
tkErrEOF String
"record key literal or }"Just(Word8
W8.DOUBLE_QUOTE,!ByteString
bs1 )->Parser TkRecord k
forall k. Parser TkRecord k
goRK ByteString
bs1 ByteString -> k
k -- "Just(Word8
W8.RIGHT_CURLY,!ByteString
bs1 )->k -> TkRecord k String
forall k e. k -> TkRecord k e
TkRecordEnd (ByteString -> k
k ByteString
bs1 )-- }Just(Word8, ByteString)
_->ByteString -> String -> TkRecord k String
forall (t :: * -> * -> *) k.
AsError t =>
ByteString -> String -> t k String
tkErrBS ByteString
bs String
"record key literal or }"-- after record pair, expecting ," or }goR1 ::Parser TkRecord k goR1 :: forall k. Parser TkRecord k
goR1 (ByteString -> ByteString
skipSpace ->ByteString
bs )ByteString -> k
k =caseByteString -> Maybe (Word8, ByteString)
BS.unconsByteString
bs ofMaybe (Word8, ByteString)
Nothing->String -> TkRecord k String
forall e k. e -> TkRecord k e
forall (t :: * -> * -> *) e k. AsError t => e -> t k e
tkErr String
"Unexpected end-of-input, expecting , or }"Just(Word8
W8.COMMA,!ByteString
bs1 )->caseByteString -> Maybe (Word8, ByteString)
BS.uncons(ByteString -> ByteString
skipSpace ByteString
bs1 )ofMaybe (Word8, ByteString)
Nothing->String -> TkRecord k String
forall (t :: * -> * -> *) k. AsError t => String -> t k String
tkErrEOF String
"key literal"Just(Word8
W8.DOUBLE_QUOTE,!ByteString
bs2 )->Parser TkRecord k
forall k. Parser TkRecord k
goRK ByteString
bs2 ByteString -> k
k Just(Word8, ByteString)
_->ByteString -> String -> TkRecord k String
forall (t :: * -> * -> *) k.
AsError t =>
ByteString -> String -> t k String
tkErrBS ByteString
bs String
"key literal"Just(Word8
W8.RIGHT_CURLY,!ByteString
bs1 )->k -> TkRecord k String
forall k e. k -> TkRecord k e
TkRecordEnd (ByteString -> k
k ByteString
bs1 )Maybe (Word8, ByteString)
_->String -> TkRecord k String
forall e k. e -> TkRecord k e
forall (t :: * -> * -> *) e k. AsError t => e -> t k e
tkErr (String -> TkRecord k String) -> String -> TkRecord k String
forall a b. (a -> b) -> a -> b
$String
"Unexpected "String -> String -> String
forall a. [a] -> [a] -> [a]
++ByteString -> String
showBeginning ByteString
bs String -> String -> String
forall a. [a] -> [a] -> [a]
++String
", expecting , or }"-- key of record (after double quote)goRK ::Parser TkRecord k goRK :: forall k. Parser TkRecord k
goRK ByteString
bs1 ByteString -> k
k =(Text -> ByteString -> TkRecord k String)
-> (String -> TkRecord k String) -> ByteString -> TkRecord k String
forall r.
(Text -> ByteString -> r) -> (String -> r) -> ByteString -> r
scanStringLiteral (\Text
t ByteString
bs ->Text -> Parser TkRecord k
forall k. Text -> Parser TkRecord k
goRK' Text
t ByteString
bs ByteString -> k
k )String -> TkRecord k String
forall e k. e -> TkRecord k e
forall (t :: * -> * -> *) e k. AsError t => e -> t k e
tkErr ByteString
bs1 -- after key of a record, expecting :goRK' ::Text->Parser TkRecord k goRK' :: forall k. Text -> Parser TkRecord k
goRK' Text
t (ByteString -> ByteString
skipSpace ->ByteString
bs )ByteString -> k
k =caseByteString -> Maybe (Word8, ByteString)
BS.unconsByteString
bs ofMaybe (Word8, ByteString)
Nothing->String -> TkRecord k String
forall (t :: * -> * -> *) k. AsError t => String -> t k String
tkErrEOF String
":"Just(Word8
W8.COLON,!ByteString
bs3 )->Key -> Tokens (TkRecord k String) String -> TkRecord k String
forall k e. Key -> Tokens (TkRecord k e) e -> TkRecord k e
TkPair (Text -> Key
Key.fromText Text
t )(Tokens (TkRecord k String) String -> TkRecord k String)
-> Tokens (TkRecord k String) String -> TkRecord k String
forall a b. (a -> b) -> a -> b
$Parser Tokens (TkRecord k String)
forall k. Parser Tokens k
goT ByteString
bs3 ((ByteString -> TkRecord k String)
 -> Tokens (TkRecord k String) String)
-> (ByteString -> TkRecord k String)
-> Tokens (TkRecord k String) String
forall a b. (a -> b) -> a -> b
$\ByteString
bs4 ->Parser TkRecord k
forall k. Parser TkRecord k
goR1 ByteString
bs4 ByteString -> k
k Just(Word8, ByteString)
_->ByteString -> String -> TkRecord k String
forall (t :: * -> * -> *) k.
AsError t =>
ByteString -> String -> t k String
tkErrBS ByteString
bs String
":"stripPrefix ::ByteString->Int->ByteString->MaybeByteStringstripPrefix :: ByteString -> Int -> ByteString -> Maybe ByteString
stripPrefix ByteString
pfx Int
n ByteString
bs |ByteString -> ByteString -> Bool
BS.isPrefixOfByteString
pfx ByteString
bs =ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just(Int -> ByteString -> ByteString
BS.Unsafe.unsafeDropInt
n ByteString
bs )|Bool
otherwise=Maybe ByteString
forall a. Maybe a
Nothing{-# INLINEstripPrefix #-}typeParser tk k =ByteString->(ByteString->k )->tk k StringshowBeginning ::ByteString->StringshowBeginning :: ByteString -> String
showBeginning =ByteString -> String
forall a. Show a => a -> String
show(ByteString -> String)
-> (ByteString -> ByteString) -> ByteString -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Int -> ByteString -> ByteString
BS.takeInt
30-- | Strip leading (ASCII) spaceskipSpace ::ByteString->ByteStringskipSpace :: ByteString -> ByteString
skipSpace =(Word8 -> Bool) -> ByteString -> ByteString
BS.dropWhile((Word8 -> Bool) -> ByteString -> ByteString)
-> (Word8 -> Bool) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$\Word8
w ->Word8
w Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
==Word8
0x20Bool -> Bool -> Bool
||Word8
w Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
==Word8
0x0aBool -> Bool -> Bool
||Word8
w Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
==Word8
0x0dBool -> Bool -> Bool
||Word8
w Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
==Word8
0x09{-# INLINEskipSpace #-}tkErrEOF ::AsError t =>String->t k StringtkErrEOF :: forall (t :: * -> * -> *) k. AsError t => String -> t k String
tkErrEOF String
expected =String -> t k String
forall e k. e -> t k e
forall (t :: * -> * -> *) e k. AsError t => e -> t k e
tkErr (String -> t k String) -> String -> t k String
forall a b. (a -> b) -> a -> b
$String
"Unexpected end-of-input, expecting "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
expected {-# INLINEtkErrEOF #-}tkErrBS ::AsError t =>ByteString->String->t k StringtkErrBS :: forall (t :: * -> * -> *) k.
AsError t =>
ByteString -> String -> t k String
tkErrBS ByteString
bs String
expected =String -> t k String
forall e k. e -> t k e
forall (t :: * -> * -> *) e k. AsError t => e -> t k e
tkErr (String -> t k String) -> String -> t k String
forall a b. (a -> b) -> a -> b
$String
"Unexpected "String -> String -> String
forall a. [a] -> [a] -> [a]
++ByteString -> String
showBeginning ByteString
bs String -> String -> String
forall a. [a] -> [a] -> [a]
++String
", expecting "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
expected {-# INLINEtkErrBS #-}--------------------------------------------------------------------------------- Text-------------------------------------------------------------------------------scanStringLiteral ::forallr .(Text->ByteString->r )->(String->r )->ByteString->r scanStringLiteral :: forall r.
(Text -> ByteString -> r) -> (String -> r) -> ByteString -> r
scanStringLiteral Text -> ByteString -> r
ok String -> r
err ByteString
bs0 =Int -> ByteString -> r
go Int
0ByteString
bs0 wherego ::Int->ByteString->r go :: Int -> ByteString -> r
go !Int
n !ByteString
bs =caseByteString -> Maybe (Word8, ByteString)
BS.unconsByteString
bs ofMaybe (Word8, ByteString)
Nothing->r
errEnd Just(Word8
34,ByteString
_)->Text -> ByteString -> r
ok (ByteString -> Text
unsafeDecodeASCII (Int -> ByteString -> ByteString
BS.Unsafe.unsafeTakeInt
n ByteString
bs0 ))(Int -> ByteString -> ByteString
BS.Unsafe.unsafeDrop(Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)ByteString
bs0 )Just(Word8
92,ByteString
bs' )->Int -> ByteString -> r
goSlash (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)ByteString
bs' Just(Word8
w8 ,ByteString
bs' )|Word8
w8 Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
<Word8
0x20->r
errCC |Word8
w8 Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
>=Word8
0x80->Int -> ByteString -> r
goEsc (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)ByteString
bs' |Bool
otherwise->Int -> ByteString -> r
go (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)ByteString
bs' -- in goEsc and goSlash we don't need to check for control characters as unescapeText verifies that.goEsc ::Int->ByteString->r goEsc :: Int -> ByteString -> r
goEsc !Int
n !ByteString
bs =caseByteString -> Maybe (Word8, ByteString)
BS.unconsByteString
bs ofMaybe (Word8, ByteString)
Nothing->r
errEnd Just(Word8
34,ByteString
_)->caseByteString -> Either UnicodeException Text
unescapeText (Int -> ByteString -> ByteString
BS.Unsafe.unsafeTakeInt
n ByteString
bs0 )ofRightText
t ->Text -> ByteString -> r
ok Text
t (Int -> ByteString -> ByteString
BS.drop(Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)ByteString
bs0 )LeftUnicodeException
e ->String -> r
err (UnicodeException -> String
forall a. Show a => a -> String
showUnicodeException
e )Just(Word8
92,ByteString
bs' )->Int -> ByteString -> r
goSlash (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)ByteString
bs' Just(Word8
_,ByteString
bs' )->Int -> ByteString -> r
goEsc (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)ByteString
bs' goSlash ::Int->ByteString->r goSlash :: Int -> ByteString -> r
goSlash !Int
n !ByteString
bs =caseByteString -> Maybe (Word8, ByteString)
BS.unconsByteString
bs ofMaybe (Word8, ByteString)
Nothing->r
errEnd Just(Word8
_,ByteString
bs' )->Int -> ByteString -> r
goEsc (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)ByteString
bs' errEnd :: r
errEnd =String -> r
err String
"Unexpected end-of-input while parsing string literal"errCC :: r
errCC =String -> r
err String
"Unespected control character while parsing string literal"--------------------------------------------------------------------------------- Number----------------------------------------------------------------------------------- number := integer fraction exponent-- integer := 0 | [1-9][0-9]* | -0 | -[1-9][0-9]*-- fraction := "" | . [0-9]+-- exponent := "" | E sign [0-9]+ | e sign [0-9]+-- sign := "" | - | +---- This scanner doesn't recognize the leading minus sign, we recognize only integer := 0 | [1-9][0-9]*,-- as the minus sign is recognized by outer scanner already.--scanNumberLiteral ::forallr .(Number ->ByteString->r )->(String->r )->ByteString->r scanNumberLiteral :: forall r.
(Number -> ByteString -> r) -> (String -> r) -> ByteString -> r
scanNumberLiteral Number -> ByteString -> r
kont String -> r
err ByteString
bs0 =ByteString -> r
state_start ByteString
bs0 wherestate_start ::ByteString->r state_start :: ByteString -> r
state_start !ByteString
bs =caseByteString -> Maybe (Word8, ByteString)
BS.unconsByteString
bs ofMaybe (Word8, ByteString)
Nothing->r
errEnd Just(Word8
w8 ,ByteString
bs' )|Word8
W8.DIGIT_0Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
<Word8
w8 ,Word8
w8 Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
<=Word8
W8.DIGIT_9->Int -> ByteString -> r
state_i1 Int
1ByteString
bs' |Word8
W8.DIGIT_0Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
==Word8
w8 ->ByteString -> r
state_after0 ByteString
bs' |Bool
otherwise->String -> r
err (String -> r) -> String -> r
forall a b. (a -> b) -> a -> b
$String
"Unexpected "String -> String -> String
forall a. [a] -> [a] -> [a]
++Word8 -> String
forall a. Show a => a -> String
showWord8
w8 String -> String -> String
forall a. [a] -> [a] -> [a]
++String
" while parsing number literal"state_after0 ::ByteString->r state_after0 :: ByteString -> r
state_after0 !ByteString
bs =caseByteString -> Maybe (Word8, ByteString)
BS.unconsByteString
bs ofMaybe (Word8, ByteString)
Nothing->Number -> ByteString -> r
kont (Integer -> Number
NumInteger Integer
0)ByteString
bs Just(Word8
w8 ,ByteString
bs' )|Word8
W8.DIGIT_0Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
<=Word8
w8 ,Word8
w8 Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
<=Word8
W8.DIGIT_9->String -> r
err String
"Number literal with leading zero"|Word8
W8.PERIODWord8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
==Word8
w8 ->Integer -> ByteString -> r
go_dec Integer
0ByteString
bs' |Word8
W8.LOWER_EWord8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
==Word8
w8 Bool -> Bool -> Bool
||Word8
W8.UPPER_EWord8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
==Word8
w8 ->Integer -> Int -> ByteString -> r
go_sci Integer
0Int
0ByteString
bs' |Bool
otherwise->Number -> ByteString -> r
kont (Integer -> Number
NumInteger Integer
0)ByteString
bs state_i1 ::Int->ByteString->r state_i1 :: Int -> ByteString -> r
state_i1 !Int
n !ByteString
bs =caseByteString -> Maybe (Word8, ByteString)
BS.unconsByteString
bs ofMaybe (Word8, ByteString)
Nothing->Number -> ByteString -> r
kont (Integer -> Number
NumInteger Integer
int )ByteString
bs Just(Word8
w8 ,ByteString
bs' )|Word8
W8.DIGIT_0Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
<=Word8
w8 ,Word8
w8 Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
<=Word8
W8.DIGIT_9->Int -> ByteString -> r
state_i1 (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)ByteString
bs' |Word8
W8.PERIODWord8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
==Word8
w8 ->Integer -> ByteString -> r
go_dec Integer
int ByteString
bs' |Word8
W8.LOWER_EWord8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
==Word8
w8 Bool -> Bool -> Bool
||Word8
W8.UPPER_EWord8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
==Word8
w8 ->Integer -> Int -> ByteString -> r
go_sci Integer
int Int
0ByteString
bs' |Bool
otherwise->Number -> ByteString -> r
kont (Integer -> Number
NumInteger Integer
int )ByteString
bs whereint :: Integer
int =ByteString -> Integer
byteStringToInteger(Int -> ByteString -> ByteString
BS.Unsafe.unsafeTakeInt
n ByteString
bs0 )go_dec ::Integer->ByteString->r go_dec :: Integer -> ByteString -> r
go_dec !Integer
int !ByteString
bs1 =caseByteString -> Maybe (Word8, ByteString)
BS.unconsByteString
bs1 ofMaybe (Word8, ByteString)
Nothing->r
errEnd Just(Word8
w8 ,ByteString
bs' )|Word8
W8.DIGIT_0Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
<=Word8
w8 ,Word8
w8 Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
<=Word8
W8.DIGIT_9->Int -> ByteString -> r
state_dec Int
1ByteString
bs' |Bool
otherwise->String -> r
err (String -> r) -> String -> r
forall a b. (a -> b) -> a -> b
$String
"Unexpected "String -> String -> String
forall a. [a] -> [a] -> [a]
++Word8 -> String
forall a. Show a => a -> String
showWord8
w8 String -> String -> String
forall a. [a] -> [a] -> [a]
++String
" while parsing number literal"wherestate_dec ::Int->ByteString->r state_dec :: Int -> ByteString -> r
state_dec !Int
n !ByteString
bs =caseByteString -> Maybe (Word8, ByteString)
BS.unconsByteString
bs ofMaybe (Word8, ByteString)
Nothing->Number -> ByteString -> r
kont (Scientific -> Number
NumDecimal Scientific
dec )ByteString
bs Just(Word8
w8 ,ByteString
bs' )|Word8
W8.DIGIT_0Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
<=Word8
w8 ,Word8
w8 Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
<=Word8
W8.DIGIT_9->Int -> ByteString -> r
state_dec (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)ByteString
bs' |Word8
W8.LOWER_EWord8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
==Word8
w8 Bool -> Bool -> Bool
||Word8
W8.UPPER_EWord8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
==Word8
w8 ->Integer -> Int -> ByteString -> r
go_sci Integer
coef (Int -> Int
forall a. Num a => a -> a
negateInt
n )ByteString
bs' |Bool
otherwise->Number -> ByteString -> r
kont (Scientific -> Number
NumDecimal Scientific
dec )ByteString
bs wherefrac :: Integer
frac =ByteString -> Integer
byteStringToInteger(Int -> ByteString -> ByteString
BS.Unsafe.unsafeTakeInt
n ByteString
bs1 )coef :: Integer
coef =Integer
int Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
*Integer
10Integer -> Int -> Integer
forall a b. (Num a, Integral b) => a -> b -> a
^Int
n Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
+Integer
frac dec :: Scientific
dec =Integer -> Int -> Scientific
Sci.scientificInteger
coef (Int -> Int
forall a. Num a => a -> a
negateInt
n )go_sci ::Integer->Int->ByteString->r go_sci :: Integer -> Int -> ByteString -> r
go_sci !Integer
coef !Int
exp10 !ByteString
bs2 =caseByteString -> Maybe (Word8, ByteString)
BS.unconsByteString
bs2 ofMaybe (Word8, ByteString)
Nothing->r
errEnd Just(Word8
w8 ,ByteString
bs' )|Word8
W8.DIGIT_0Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
<=Word8
w8 ,Word8
w8 Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
<=Word8
W8.DIGIT_9->Integer -> Int -> ByteString -> Int -> ByteString -> r
go_sci_pos Integer
coef Int
exp10 ByteString
bs2 Int
1ByteString
bs' |Word8
W8.PLUSWord8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
==Word8
w8 ->caseByteString -> Maybe (Word8, ByteString)
BS.unconsByteString
bs' ofMaybe (Word8, ByteString)
Nothing->r
errEnd Just(Word8
w8' ,ByteString
bs'' )|Word8
W8.DIGIT_0Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
<=Word8
w8' ,Word8
w8' Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
<=Word8
W8.DIGIT_9->Integer -> Int -> ByteString -> Int -> ByteString -> r
go_sci_pos Integer
coef Int
exp10 ByteString
bs' Int
1ByteString
bs'' |Bool
otherwise->Word8 -> r
forall {a}. Integral a => a -> r
errUnx Word8
w8' |Word8
W8.HYPHENWord8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
==Word8
w8 ->caseByteString -> Maybe (Word8, ByteString)
BS.unconsByteString
bs' ofMaybe (Word8, ByteString)
Nothing->r
errEnd Just(Word8
w8' ,ByteString
bs'' )|Word8
W8.DIGIT_0Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
<=Word8
w8' ,Word8
w8' Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
<=Word8
W8.DIGIT_9->Integer -> Int -> ByteString -> Int -> ByteString -> r
go_sci_neg Integer
coef Int
exp10 ByteString
bs' Int
1ByteString
bs'' |Bool
otherwise->Word8 -> r
forall {a}. Integral a => a -> r
errUnx Word8
w8' |Bool
otherwise->Word8 -> r
forall {a}. Integral a => a -> r
errUnx Word8
w8 go_sci_pos ::Integer->Int->ByteString->Int->ByteString->r go_sci_pos :: Integer -> Int -> ByteString -> Int -> ByteString -> r
go_sci_pos !Integer
coef !Int
exp10 !ByteString
bs2 !Int
n !ByteString
bs =caseByteString -> Maybe (Word8, ByteString)
BS.unconsByteString
bs ofMaybe (Word8, ByteString)
Nothing->Number -> ByteString -> r
kont (Scientific -> Number
NumScientific Scientific
sci )ByteString
bs Just(Word8
w8 ,ByteString
bs' )|Word8
W8.DIGIT_0Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
<=Word8
w8 ,Word8
w8 Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
<=Word8
W8.DIGIT_9->Integer -> Int -> ByteString -> Int -> ByteString -> r
go_sci_pos Integer
coef Int
exp10 ByteString
bs2 (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)ByteString
bs' |Bool
otherwise->Number -> ByteString -> r
kont (Scientific -> Number
NumScientific Scientific
sci )ByteString
bs whereexp10' :: Int
exp10' =Integer -> Int
forall a. Num a => Integer -> a
fromInteger(ByteString -> Integer
byteStringToInteger(Int -> ByteString -> ByteString
BS.Unsafe.unsafeTakeInt
n ByteString
bs2 ))sci :: Scientific
sci =Integer -> Int -> Scientific
Sci.scientificInteger
coef (Int
exp10 Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
exp10' )go_sci_neg ::Integer->Int->ByteString->Int->ByteString->r go_sci_neg :: Integer -> Int -> ByteString -> Int -> ByteString -> r
go_sci_neg !Integer
coef !Int
exp10 !ByteString
bs2 !Int
n !ByteString
bs =caseByteString -> Maybe (Word8, ByteString)
BS.unconsByteString
bs ofMaybe (Word8, ByteString)
Nothing->Number -> ByteString -> r
kont (Scientific -> Number
NumScientific Scientific
sci )ByteString
bs Just(Word8
w8 ,ByteString
bs' )|Word8
W8.DIGIT_0Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
<=Word8
w8 ,Word8
w8 Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
<=Word8
W8.DIGIT_9->Integer -> Int -> ByteString -> Int -> ByteString -> r
go_sci_neg Integer
coef Int
exp10 ByteString
bs2 (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)ByteString
bs' |Bool
otherwise->Number -> ByteString -> r
kont (Scientific -> Number
NumScientific Scientific
sci )ByteString
bs whereexp10' :: Int
exp10' =Integer -> Int
forall a. Num a => Integer -> a
fromInteger(ByteString -> Integer
byteStringToInteger(Int -> ByteString -> ByteString
BS.Unsafe.unsafeTakeInt
n ByteString
bs2 ))sci :: Scientific
sci =Integer -> Int -> Scientific
Sci.scientificInteger
coef (Int
exp10 Int -> Int -> Int
forall a. Num a => a -> a -> a
-Int
exp10' )errEnd :: r
errEnd =String -> r
err String
"Unexpected end-of-input while parsing number literal"errUnx :: a -> r
errUnx a
w8 =String -> r
err (String -> r) -> String -> r
forall a b. (a -> b) -> a -> b
$String
"Unexpected "String -> String -> String
forall a. [a] -> [a] -> [a]
++Char -> String
forall a. Show a => a -> String
show(Int -> Char
chr(a -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegrala
w8 ))String -> String -> String
forall a. [a] -> [a] -> [a]
++String
" while parsing number literal"

AltStyle によって変換されたページ (->オリジナル) /