syntastic 0.4.0

Generic abstract syntax representation
Documentation
# Changelog
All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [0.4.0] - 2020-11-28
### Added
- AST variable substitution.
- Property-based test to verify ASTs roundtrip through serialization and deserialization.

### Removed
- `ast::Value` trait because in this context AST values can be modeled as variables.
- `ast::Ast::{from_var, from_op}` replaced with `From` and `TryFrom` traits, respectively.
- `Display` implementations for AST types removed (and replaced with private `render_sexp` methods).

## [0.3.0] - 2020-11-28
### Fixed
- Change AST value, variable, and operator types into traits so consumers must be consistent about their associated sorts (and arities for operators).
- Restrict visibility of AST's variants to prevent construction invalid operation nodes.

### Changed
- AST node serializations no longer include sorts and arities because they are determined from the trait implementations.

## [0.2.2] - 2020-11-27
### Added
- Represent, display, serialize, and deserialize generic abstract syntax trees.

[Unreleased]: https://github.com/mx00s/mx00s/syntastic/compare/0.4.0...HEAD
[0.4.0]: https://github.com/mx00s/syntastic/compare/0.3.0...0.4.0
[0.3.0]: https://github.com/mx00s/syntastic/compare/0.2.2...0.3.0
[0.2.2]: https://github.com/mx00s/syntastic/compare/0.1.0...0.2.2