enum Empty_set<> { } enum Unit<> { Tt } enum Bool<> { True, False } fn xorb(b1: Bool, b2: Bool) -> Bool { match b1 { Bool::True => (match b2 { Bool::True => Bool::False, Bool::False => Bool::True }), Bool::False => b2 } } enum Nat<> { O, S(Box<Nat>) } enum Prod< a, b> { Pair(Box<a>, Box<b>) } fn fst<p,a2>(p: Prod<p,a2>) -> p { match p { Prod::Pair(box x,box y) => x } } enum List< a> { Nil, Cons(Bo

