[][src]Trait trait_eval::Fact

pub trait Fact: Nat {
    type Result: Nat;
}

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,0000.)

Associated Types

type Result: Nat

Loading content...

Implementors

impl Fact for Zero[src]

type Result = One

impl<T: Nat, U: Nat> Fact for Succ<T> where
    T: Fact<Result = U>,
    U: Times<Succ<T>>, 
[src]

type Result = U::Result

Loading content...