packages feed

jsontsv-0.1.0.0: notes

http://hackage.haskell.org/package/aeson-0.8.0.1

decode = decodeWith jsonEOF fromJSON

decode :: (FromJSON a) => L.ByteString -> Maybe a
decode = decodeWith jsonEOF fromJSON

http://hackage.haskell.org/package/aeson-0.8.0.1/docs/src/Data-Aeson.html#decode

import Data.Aeson.Parser.Internal (decodeWith, decodeStrictWith,
                                   eitherDecodeWith, eitherDecodeStrictWith,
                                   jsonEOF, json, jsonEOF', json')


import qualified Data.Attoparsec.Lazy as L

http://hackage.haskell.org/package/aeson-0.6.0.0/docs/src/Data-Aeson-Parser-Internal.html


decodeWith :: Parser Value -> (Value -> Result a) -> L.ByteString -> Maybe a
decodeWith p to s =
    case L.parse p s of
      L.Done _ v -> case to v of
                      Success a -> Just a
                      _         -> Nothing

import qualified Data.Attoparsec.Lazy as L

https://hackage.haskell.org/package/attoparsec-0.12.1.2

import Data.Attoparsec.ByteString.Lazy

https://hackage.haskell.org/package/attoparsec-0.12.1.2/docs/Data-Attoparsec-ByteString-Lazy.html

jsonEOF :: Parser Value
jsonEOF = json <* skipSpace <* endOfInput




sepBy1 :: Alternative f => f a -> f s -> f [a]
sepBy1 p s = scan
    where scan = liftA2 (:) p ((s *> scan) <|> pure [])

scan :: s -> (s -> Char -> Maybe s) -> Parser Text

A stateful scanner. The predicate consumes and transforms a state argument, and each transformed state is passed to successive invocations of the predicate on each character of the input until one returns Nothing or the input ends.

This parser does not fail. It will return an empty string if the predicate returns Nothing on the first character of input.

Note: Because this parser does not fail, do not use it with combinators such as many, because such parsers loop until a failure occurs. Careless use will thus result in an infinite loop.

Control.Applicative liftA2 :: Applicative f => (a -> b -> c) -> f a -> f b -> f c


http://hackage.haskell.org/package/attoparsec-0.12.1.2/docs/Data-Attoparsec-Text.html#v:Partial

Incremental input

attoparsec supports incremental input, meaning that you can feed it a Text that
represents only part of the expected total amount of data to parse. If your
parser reaches the end of a fragment of input and could consume more input, it
will suspend parsing and return a Partial continuation.

Supplying the Partial continuation with another string will resume parsing at
the point where it was suspended, with the string you supplied used as new
input at the end of the existing input. You must be prepared for the result of
the resumed parse to be another Partial continuation.

To indicate that you have no more input, supply the Partial continuation with
an empty Text.

Remember that some parsing combinators will not return a result until they
reach the end of input. They may thus cause Partial results to be returned.

If you do not need support for incremental input, consider using the parseOnly
function to run your parser. It will never prompt for more input.

Note: incremental input does not imply that attoparsec will release portions of
its internal state for garbage collection as it proceeds. Its internal
representation is equivalent to a single Text: if you feed incremental input to
an a parser, it will require memory proportional to the amount of input you
supply. (This is necessary to support arbitrary backtracking.)