#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum Either { A(A), B(B), } impl Either { pub fn map(self, f1: F1, f2: F2) -> Either where F1: FnOnce(A) -> U, F2: FnOnce(B) -> V, { match self { Either::A(a) => Either::A(f1(a)), Either::B(b) => Either::B(f2(b)), } } }