use crate::Category;
use core::{
fmt::{Debug, Display},
hash::Hash,
};
pub trait Kind: Copy + Clone + Eq + PartialEq + Ord + PartialOrd + Debug + Display + Hash {
const BITS: usize;
type R;
type Category: Category<R = Self::R>;
fn category(&self) -> Self::Category;
fn name(&self) -> &'static str;
fn value(&self) -> Self::R;
fn from_value(value: Self::R) -> Option<Self>;
}