TYP: type-level programming in Rust
TYP enables you to write type operators, the functions that translates types, in Rust syntax.
It is re-design of willcrichton/Tyrade and was inspired by jerry73204/type-freak.
Features
Rusty syntax
TYP adopts Rust-like syntax, where values become types, and types become trait bounds. The core concept is the type operator, which is a function that takes type arguments and produce types. Trait bounds are optionally added to input and output types.
<generic1, generic2>lists the generic identifiers that helps disginguishing from public types.type1andtype2are input types composed of generics and public types.type1: _means the type has no trait bound.- The output trait bound
fn() -> TraitBoundis optional.
The snipplet demonstrates a simple type operator.
typ!
Built-in typenum support
TYP provides first-class support to typenum. Integer literals are translated to typenum types. The following literals are understood by TYP.
- Signed integers:
7or7i - Unsigned integers:
7u - Bits:
trueandfalse
Common binary and unary operators applies on types with appropriate traits. For example, A + B expands to <A as Add<B>>::Output.
typ!
Type matching
Like normal Rust, the match syntax lets you match and unpack types. You can bind new generics on a pattern using #[generics(...)] attribute.
The example demonstrates a type operator that appends a type at the end of type-level list. It's done by recursively unpack the list into Cons nodes and Nil end-of-list marker.
;
typ!
Examples
More advanced examples can be found in tests/ directory.
License
MIT license. See LICENSE.txt.