A representation of the parser.
Instances6Functor, Applicative, Alternative, OnObject, Semigroup, Monoid
Functor ParserDefined in json-stream-0.4.6.1 · Data.JsonStream.ParserApplicative ParserDefined in json-stream-0.4.6.1 · Data.JsonStream.Parser<*> will run both parsers in parallel and combine results.
It behaves as a list functor (produces all combinations), but the typical use is:
Example4 expressions :set -XOverloadedStringslet text = "[{\"name\": \"John\", \"age\": 20}, {\"age\": 30, \"name\": \"Frank\"}]"let parser = arrayOf $ (,) <$> "name" .: string <*> "age" .: integerparseByteString parser text :: [(T.Text,Int)][("John",20),("Frank",30)]
Alternative ParserDefined in json-stream-0.4.6.1 · Data.JsonStream.ParserMatch items from the first parser, if none is matched, return items from the second parser. Constant-space if second parser returns constant number of items. .| is implemented using this operator.
Example5 expressions let json = "[{\"key1\": [1,2], \"key2\": [5,6], \"key3\": [8,9]}]"let parser = arrayOf $ "key1" .: (arrayOf value) <|> "key2" .: (arrayOf value)parseByteString parser json :: [Int][1,2]let parser = arrayOf $ "key-non" .: (arrayOf value) <|> "key2" .: (arrayOf value)parseByteString parser json :: [Int][5,6]
many - Gather matches and return them as list.
Example3 expressions let json = "[{\"keys\":[1,2], \"values\":[5,6]}, {\"keys\":[9,8], \"values\":[7,6]}]"let parser = arrayOf $ (,) <$> many ("keys" .: arrayOf integer) <*> many ("values" .: arrayOf integer)parseByteString parser json :: [([Int], [Int])][([1,2],[5,6]),([9,8],[7,6])]
OnObject Parser aDefined in json-stream-0.4.6.1 · Data.JsonStream.ParserSemigroup (Parser a)Defined in json-stream-0.4.6.1 · Data.JsonStream.ParserMonoid (Parser a)Defined in json-stream-0.4.6.1 · Data.JsonStream.Parser<> will run both parsers in parallel yielding from both as the data comes
Example4 expressions :m +Data.Monoidlet test = "[{\"key1\": [1,2], \"key2\": [5,6], \"key3\": [8,9]}]"let parser = arrayOf $ "key1" .: (arrayOf value) <> "key2" .: (arrayOf value)parseByteString parser test :: [Int][1,2,5,6]