/-! Tests for delaborating over-applied functions. For example, checking to see that the algorithm for app unexpanders handles over-applications. -/ /-! Technically these are not examples of overapplied functions, but in principle these are two-argument functions that return functions. -/ def add (f g : Nat → Nat) : Nat → Nat := fun x => f x + g x def mul (f g : Nat → Nat) : Nat → Nat := fun x => f x * g x variable (f g : Nat → Nat) infixl:65 " +' " => add /-! Checking the app unexpander that was generated by the `infixl` command works when overapplied. -/ #check f +' g #check (f +' g) 1 @[app_unexpander mul] def unexpandAdd : Lean.PrettyPrinter.Unexpander | `($_ $f $g) => `($f * $g) | _ => throw () /-! Checking the app unexpander when both applied and overapplied -/ #check mul f g #check mul f g 1 /-! Make sure pp.explicit turns off app unexpanders -/ section set_option pp.explicit true #check mul f g #check mul f g 1 end