pub trait Fact: Nat {
type Result: Nat;
}
Expand description
§Factorial!
Did I hear shouting? Or was that just this epic compile-time factorial operator?!
assert_eq!(<Zero as Fact>::Result::eval(), 1);
assert_eq!(<One as Fact>::Result::eval(), 1);
assert_eq!(<Two as Fact>::Result::eval(), 2);
assert_eq!(<Three as Fact>::Result::eval(), 6);
assert_eq!(<Four as Fact>::Result::eval(), 24);
assert_eq!(<Five as Fact>::Result::eval(), 120);
// assert_eq!(<Six as Fact>::Result::eval(), 720); -- `rustc` gives up about here :((
(Ok, fine, yes, the recursion limit is on like 20,000,000.)