- variable names can now contain digits (but they must start with a letter)
- added
Term::{has_free_variables, is_isomorphic_to}
- @AgentElement for all the changes in this release
- fixed the names of free variables when printing in classic notation
- @hiratara for implementing the fix
- fixed the parsing of free variables in classic notation
- @hiratara for implementing the fix
- add support for crates like
anyhow
by implementingError
for errors
- @Zicklag for adding languages to code-blocks in README
- @hiratara for implementing
Error
forParseError
andTermError
- a pass with the current
clippy
- bumped Rust edition to 2021
- a pass with the current
clippy
- the removal of outdated benches
- a pass with the current
clippy
- use only one
Box
inTerm::App
@billpmurphy for adding list::pair::{drop, drop_while, replicate}
and a docfix
parse
now accepts Unicode variables inClassic
mode- improve parser code (~25% speedup in
Classic
mode) - add
list::pair::{drop, drop_while, replicate}
@billpmurphy for creating num::signed
and data::result
and their applicable Into
conversions,
adding signed::{add, modulus, neg, simplify, sub, to_signed, mul}
, result::{ok, err, is_ok, is_err, option_ok, option_err, unwrap_or, map, map_err, and_then}
and stumpfu::{mul, to_church, to_scott, to_parigot}
- add
boolean::{xnor, imply}
- add signed numbers
- add result data type
- add
signed::{add, modulus, neg, simplify, sub, to_signed, mul}
- add
result::{ok, err, is_ok, is_err, option_ok, option_err, unwrap_or, map, map_err, and_then}
- add
stumpfu::{mul, to_church, to_scott, to_parigot}
- add
num::convert::{Encoding, IntoSignedNum}
- impl
IntoSignedNum
fori32
@billpmurphy for the idea to make reduction::beta
IO-free, splitting conversions (and
thus allowing all encodings to be compiled together), adding term::is_supercombinator
,
option::{map, unwrap_or, and_then}
, church::{to_scott, to_parigot, to_stumpfu}
, combinators::T
and scott::{is_zero, to_church}
, improving conversions into terms and adding
impl<T> IntoChurch for Option<T> where T: IntoChurch
- restructure and rename modules
- rework compilation features
- remove
impl Term
from Church data types - remove
reduction::compare
- remove
Term::{app, apply, eval}
- rename
term::Error
toterm::TermError
- rename
TermError
variant names - rename combinators
- rename
*::numerals::plus
toadd
- rename
*::numerals::mult
tomul
- rename
church::numerals::{lshift, rshift}
to{shl, shr}
- rename
Term::beta
toTerm::reduce
- rename
church::lists::null
tois_nil
- rename
parser::Error
toParseError
- rename
combinators::T
toR
- simplify
term::Error
- unify test and bench names
- make
reduction::beta
IO-free - turn
reduction::apply
into a method onTerm
- make
ParseError::InvalidCharacter
0-indexed - split
Into<Term>
conversion intoIntoChurch
,IntoScott
andIntoParigot
- fix the empty case in
list::take_while
- refactor benchmarks using macros
- refactor integration tests using macros
- improve documentation
- implement conversions to pair, list and option for all numeral types
- add Stump-Fu numeral encoding
- add binary numeral encoding
- add Church-, Scott- and Parigot-encoded list
- add tuple data type
- add macros for automated creation of conversion traits and implementations
- add an
encoding
feature and make it default - add an undefined term
term::UD
- add
tuple::{tuple, projection}
- add
binary::{b0, b1, zero, is_zero, one, lsb, shl0, shl1, strip, succ, pred}
- add
option::{map, unwrap_or, and_then}
- add
term::is_supercombinator
- add
stumpfu::{zero, is_zero, one, succ, pred, add}
- add
parigot::{is_zero, one, mult, sub}
- add
impl<T> IntoChurch for Option<T> where T: IntoChurch
- add
num::scott::{is_zero, one, add, mul, pow, to_church}
- add
num::church::{to_scott, to_parigot, to_stumpfu}
- add
combinators::T
(Turing combinator) - add
list::{church, scott, parigot}::{nil, is_nil, cons, head, tail}
- ensure all functions match their definition in documentation
@billpmurphy for creating church::option
, adding option::{none, some, is_none, is_some, map_or}
, adding church::lists::{init, zip, zip_with, take, take_while}
and simplifying
church::lists::last
- add Scott encoding as a compilation feature
- add a Scott numerals module
- add
scott::{zero, succ, pred}
- add Parigot encoding as a compilation feature
- add a Parigot numerals module
- add
parigot::{zero, succ, pred, plus}
- add a Church option module
- add
church::option::{is_none, is_some, map_or}
- add
church::pairs::swap
- add
church::lists::{init, zip, zip_with, take_while}
- simplify
church::lists::last
- more fine-grained parser benchmarks
- add Church list benchmarks
@billpmurphy for adding church::lists::last
- add
church::lists::last
- change all instances of
try!()
to?
- replace 2
clone()
s withreplace()
s (big performance wins) - simplify doctest imports in booleans.rs
- simplify and improve doctests in combinators.rs, lists.rs, pairs.rs and numerals.rs
- reorganize unit tests in lists.rs
- remove lots of doctest boilerplate
- some code readability improvements
- more benchmarks
@billpmurphy for adding church::numerals::{min, max, lshift, rshift, is_even, is_odd}
and
church::pairs::uncurry
- add
church::numerals::{min, max, lshift, rshift, is_even, is_odd}
for Church numerals - add
church::pairs::uncurry
- add
abs!()
macro for multiple abstraction and use it internally - simplify many
church::numerals
functions usingchurch::numerals::{one, pred}
- move integration tests to a tests folder
- remove one unnecessary mutability
- add maintenance badges
- core tests no longer use Church-encoded data
- adhere to C-REEXPORT
- improved parser performance
- improved readability of
reduction::compare
- added benchmarks
- fixed two doc links
- minor code improvements
First stable release.