tylar
Type-Level Arithmetic in Rust.
Supports addition, subtraction, multiplication and division of (small-ish*) type-level integers.
Inspired by Björn Buckwalter's numtype library for Haskell. Brought to Rust thanks to multidispatch and associated types.
* Numbers in the range (–50,50) should mostly work, depending on the operations. Typechecking might be rather slow.
Example
// N2 is the type for -2, P5 is +5, Out is the result type
// of the addition; new() creates a new instance (actually a
// no-op, since the types are zero-sized) and into() turns
// the object into an integer value, computed at compile-time
// due to static dispatch.
let result: i32 = new.into;
println!; // prints `-2 + 5 = 3`
For more, see examples/basics.rs and run cargo run --example basics
.
Unfortunately these examples (and therefore also cargo test
) do not work with Rust 1.0, but tylar itself is compatible and usable with Rust 1.0.
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.