llml 0.2.3

Implementation of basic math data types with high level frontend and low level backend
macro_rules! map1 {
    (1, $name:ident, $fun:ident, $($in:ident),+) => {
        map1!(
            0, $name, $fun
            $(, $in, $in)*
        );
    };

    (0, $name:ident, $fun:ident, $($in:ident, $out:ident),+) => {
        pub trait $name {
            type Output;

            fn $fun (self) -> Self::Output;
        }

        $(
            impl $name for $in {
                type Output = $out;

                fn $fun (self) -> Self::Output {
                    $in::$fun(self)
                }
            }
        )*
    };
}

macro_rules! map1_float {
    ($name:ident, $fun:ident) => {
        map1!(1, $name, $fun, f32, f64);
    };

    ($name:ident, $fun:ident, $out32:ident, $out64:ident) => {
        map1!(
            0, $name, $fun,
            f32, $out32,
            f64, $out64  
        );
    };
}

map1_float!(
    Sqrt, sqrt
);