use type_fn::*; #[derive(Debug)] pub struct True; #[derive(Debug)] pub struct False; type_fn! { pub fn Or; pub fn And; pub fn Xor; pub fn Not; } type_fn_impl! { fn Or< => True, B> => True; fn Or< => False, B> => B; fn And< => True, B> => B; fn And< => False, B> => False; fn Not< => True> => False; fn Not< => False> => True; fn Xor< => True, B> where Not: + TypeFn, => as TypeFn>::Ret; fn Xor< => False, B> => B; } fn main() { println!( "True AND False: {}", core::any::type_name::< as TypeFn>::Ret>() ); println!( "True OR False: {}", core::any::type_name::< as TypeFn>::Ret>() ); }