### Input let Pair = (T1: Type) => (T2: Type) => (Out: Type) -> (T1 -> T2 -> Out) -> Out; let pair = (T1: Type) => (T2: Type) => (v1: T1) => (v2: T2) => (Out: Type) => (destruct: T1 -> T2 -> Out) => destruct v1 v2; let fst = (T1: Type) => (T2: Type) => (p: Pair T1 T2) => p T1 (v1 => v2 => v1); let snd = (T1: Type) => (T2: Type) => (p: Pair T1 T2) => p T2 (v1 => v2 => v2); snd _ _ (pair _ _ Type ((v: Type) => v)) ### Eval (v: Type) => v ### Type (Type -> Type)