1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
use std::fmt::Debug; #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] pub struct Singleton<T> { value: T, } impl<T: Debug> Singleton<T> { pub fn new(value: T) -> Self { Self { value } } } #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] pub struct SemiRegular<T> { value: T, } impl<T: Debug + Clone> SemiRegular<T> { pub fn new(value: T) -> Self { Self { value } } } #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] pub struct Regular<T> { value: T, } impl<T: Debug + Clone + Eq> Regular<T> { pub fn new(value: T) -> Self { Self { value } } } #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] pub struct TotallyOrdered<T> { value: T, } impl<T: Debug + Clone + Eq + Ord> TotallyOrdered<T> { pub fn new(value: T) -> Self { Self { value } } }