# polyparse change log

### Changes in polyparse-1.4.1

- Bugfix for 'discard', so that in the lazy variation it actually checks that the item to be discarded satisfies the given parser.
- Bugfixes in Text.Parse, such that 'optionalParens' is used more consistently.

  ### Changes in polyparse-1.4

  - New API: the primitive parser 'eof' is now available in all variations of the Poly combinators.
  - New implementation of Text.Parse.word - it no longer uses the Haskell'98 Prelude.lex, but provides its own proper lexer, with better error messages.
  - New module: Text.ParserCombinators.Poly.ByteString is an instance of the PolyParse class specialised to ByteString input, rather than being polymorphic over the input token type.
  - New module: Text.Parse.ByteString, is like Text.Parse but with ByteString input rather than String.
  - New API calls: Text.Parse.readByParse and readsPrecByParsePrec, to make it easy to create instances of the old Read class (for backwards compatibility) from your TextParser.
  - Bugfix: in Text.Parse, parseInt, parseDec, parseOct, and parseHex had an extra spurious argument that was unused, so it has been removed (API change). In addition parseLitChar relied on the non-existent use of that argument, so it has been fixed too.
  - Bugfix: Text.Parse.parseFloat now accepts a plain integer as a float, to match the H'98 behaviour of readFloat.
  - Bugfix: the `discard` combinator now forces the discarded item; previously incorrect parses could hide inside, without triggering an error.

  ### Changes in polyparse-1.3

  - Bugfix: Text.Parse.parseFloat now accepts ordinary floating point notation, in addition to scientific (exponent) notation.

  ### Changes in polyparse-1.2

  - Improves the Text.Parse implementation significantly. Where previously all the parsers for builtin basic datatype (Int,Float,Char) were just thin wrappers over the H'98 Read instances, now they are all proper parsers, therefore they should (a) be faster; (b) give better error messages.
  - Reduced the number of implementation variations to choose from. In particular, NoLeak has become the default implementation, and the previous default has been dropped (because it space-leaks).

  ### Changes in polyparse-1.1

  - Much improved the laziness of the PolyLazy combinators.
  - Addition of a class-based interface to the Poly libraries, to reduce code duplication amongst the variations, and to allow for more experimentation with different implementations.
  - Several new experimental implementations of the interface.

  ### Changes in polyparse-1.0

  - Version number change from 1.00 to 1.0, for silly cabal/hackage.
  - Minor fix to parsing strings in Text.Parse.

  ### Changes in polyparse-1.00

  - No changes, but released separately from HaXml

  ### Changes in HaXml-1.16

  - New: lazier parsers
    - `Text.XML.HaXml.ParseLazy`
    - `Text.XML.HaXml.Html.ParseLazy`
    - `Text.ParserCombinators.PolyLazy`
    - `Text.ParserCombinators.PolyStateLazy`

  ### Changes in HaXml-1.15

  - New: DrIFT has now been fully updated to produce instances of Text.ParserCombinators.TextParser.Parse.
  - New: the parser combinator library Poly has been split into two variations, Poly and PolyState. They have almost the same API, only the latter includes a running state where the former does not.
  - The TextParser library (a replacement for the Haskell'98 Read class) has also been improved with more new combinators. Really, these parser combinator experiments do not belong in HaXml, and will eventually be split out into a separate package.