What about the cognitive cost of having a function signature that takes parameter (f) vs. one that takes (f: int -> int)? In the first case, I’m on my own. In the second, I can probably infer from the type signature what the function is doing.
It seems like you’re opposed to languages that make static typing noisy, as opposed to static typing itself. If so, I agree.