pub type NumberInner = i64;
pub const fn box_cons(cons: u64) -> u64 {
cons << 1
}
pub const fn unbox_cons(cons: u64) -> u64 {
cons >> 1
}
pub const fn is_cons(value: u64) -> bool {
value & 1 == 0
}
pub const fn from_number(number: NumberInner) -> NumberInner {
(number << 1) | 1
}
pub const fn to_number(number: NumberInner) -> NumberInner {
number >> 1
}
pub const fn from_i64(number: i64) -> NumberInner {
from_number(number)
}
pub const fn to_i64(number: NumberInner) -> i64 {
to_number(number)
}
pub const fn from_f64(number: f64) -> NumberInner {
from_number(number as _)
}
pub const fn to_f64(number: NumberInner) -> f64 {
to_number(number) as _
}
pub const fn from_raw(raw: u64) -> NumberInner {
raw as _
}
pub const fn to_raw(number: NumberInner) -> u64 {
number as _
}
pub const fn power(x: NumberInner, y: NumberInner) -> NumberInner {
x.pow(y as _)
}