macro_rules! __make_types {
($System: ident, $($Nums: ident),+ | $($Types: ident),+ | $DeadType: ident, $($Others: ident),* | $($New: ident),*) => (
__make_types!($System, $($Nums),+, Zero | $($Types),+ | $($Others),* | $DeadType $(, $New)*);
);
($System: ident, $First: ident, $($Nums: ident),* | $($Types: ident),+ | $Type: ident | $($New: ident),+) => (
pub type Unitless = $System<Zero, $($Nums),*>;
impl Dimensionless for Unitless {}
__make_types!($System, $($Nums),*, $First | $Type, $($New),* );
);
($System: ident, $First: ident, $($Nums: ident),* | $Type: ident, $($Types: ident),+) => (
pub type $Type = $System<$First, $($Nums),*>;
__make_types!($System, $($Nums),*, $First | $($Types),*);
);
($System: ident, $($Nums: ident),* | $Type: ident) => (
pub type $Type = $System<$($Nums),*>;
);
}