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>()
);
}