代数 - 全順序化

部分順序のみ与えられている型に全順序を与える. ついでに全同値も与える.

このコードは qiita.com/hatoo@github/items/fa14ad36a1b568d14f3e にあるものを拝借した. 作者の @hatoo に感謝します.

/// Algebra - Totalize PartialOrd
/// Thanks to: https://qiita.com/hatoo@github/items/fa14ad36a1b568d14f3e
#[derive(Copy, Clone, Debug, PartialEq, PartialOrd)]
struct Total<T>(T);
impl<T> Total<T> { fn unwrap(self) -> T { self.0 } }
impl<T: PartialEq> Eq for Total<T> {}
impl<T: PartialOrd> Ord for Total<T> {
    fn cmp(&self, rhs: &Total<T>) -> std::cmp::Ordering {
        self.0.partial_cmp(&rhs.0).unwrap()
    }
}