open import Agda.Builtin.Nat using (Nat; _+_) swapF : ∀ {A B : Set} → (A → A → B) → (A → A → B) swapF f x y = f y x testSwapAdd : Nat testSwapAdd = swapF _+_ 40 2 testSwapAdd2 : Nat → Nat testSwapAdd2 x = swapF _+_ x 2 testSwapSwap : Nat testSwapSwap = swapF (swapF _+_) 40 2 add3 : Nat → Nat → (Nat → Nat) add3 x y = λ z → x + y + z testSwapAdd3 : Nat testSwapAdd3 = swapF add3 40 1 1 testSwapSwap3 : Nat testSwapSwap3 = swapF (swapF add3) 40 1 1 {-# FOREIGN AGDA2RUST pub fn main() { println!("{}:\t {} | {} | {} | {} | {}", module_path!(), testSwapAdd(), testSwapAdd2(40), testSwapSwap(), testSwapAdd3(), testSwapSwap3(), ); } #-}