use std::{
any::Any,
fmt::{Debug, Display},
hash::Hash,
ops::{Add, Deref},
};
use crate::Scope;
pub mod aliases;
pub trait Comparable = Debug + PartialEq + Eq + PartialOrd + Ord + Hash;
pub trait RawRepr = Any + Add<Output = Self> + Copy + Display + Comparable;
pub trait Id<S: Scope, T: RawRepr>: Comparable {
type Handle: Clone + Deref<Target = T> + Comparable;
fn handle(&self) -> Self::Handle;
}