lexpr 0.2.2

A representation for Lisp data
Documentation
# 0.2.2

New features:

- The `Value` type now implements `FromStr` using the default syntax.

Parser bugfixes:

- "Peculiar identifiers", i.e. those starting with "+", "-" or ".",
  should now be handled properly.

- Number literals that start with a "+" are no longer erroneously
  parsed as symbols.

- The handling of dots inside lists should now be more robust,
  detecting invalid syntax that was accepted before.

# 0.2.1

Fix version number in README; no other changes.

# 0.2.0

Incompatible changes:

- The `Atom` enum no longer exists. All its variants are now part of
  the `Value` enum itself.
- List values are no longer represented as `List` and `ImproperList`
  variants, but are more faithfully modeled as chains of "cons"
  cells. See the `Value::Cons` variant and the new `Cons` data
  type. Conversion to vectors and iteration over cons cell chains is
  supported.
- The `String`, `Symbol` and `Keyword` variants no longer contain a
  `String`, but a `Box<str>` to reduce the memory footprint of
  `Value`. As in-place modification of these variants is expected to
  be a seldom-required operation, the ergonomic impact is deemed
  acceptable.
- The `Error` type, as it currently only relates to S-expression
  parsing, is now found in the `lexpr::parse` module.

New features:

- Serde support is now available via the companion crate
  [`serde-lexpr`], which is developed in parallel with `lexpr`,
  sharing the same git repository.
- There is now the `Value::Vector` variant for representing Lisp
  vectors. Vectors can be constructed via the `sexp!` macro using
  Scheme syntax, e.g. `sexp!(#(1 2 3))`. Both Emacs Lisp and Scheme
  syntax is supported for reading and printing.
- Characters are now supported with the `Value::Char` variant. Both
  Emacs Lisp and Scheme syntax is supported.
- Byte vectors are now supported with the `Value::Bytes` variant. This
  is supported for Scheme R6RS and R7RS syntax. For Emacs Lisp, this
  data type maps to unibyte strings.
- Escapes sequences in string literals now support the appropriate
  syntax for the selected Lisp dialect, instead of using JSON syntax.
- There is now a `Number::visit` method, which can be used to dispatch
  on the internal type of the number.

[`serde-lexpr`]: https://github.com/rotty/lexpr-rs/tree/master/serde-lexpr

# 0.1.3

Noteworthy changes:

- Initial parsing and printing support.

# 0.1.2

Noteworthy changes:

- New constructors `Value::list()`, `Value::improper_list()`, and
  `Value::empty_list()`.
- New predicates `Value::is_symbol()`, `Value::is_list()`, and
  `Value::is_improper_list()`.
- New accessor `Value::as_symbol()`.
- New conversions using the `From`/`Into` traits:
  - `Value` can now additionally be constructed from `Atom` and `Cow<str>`.
  - `Atom` can now additionally be constructed from `Cow<str>`.
- A few initial, basic API tests added.

# 0.1.1

Noteworthy changes:

- Fix in `Atom::keyword()`
- More accesor functions for `Value` and `Atom`
- Documentation expanded a bit
- We now build on travis-ci

# 0.1.0

Initial release, features:

- `Value` type and `sexp` macro and corresponding documentation.