Multiple type parameters and closures

when trying to compile the following code:

trait Foo {
    fn say_hello(&self);
    fn new() -> Self;

struct Bar;

impl Foo for Bar {
    fn say_hello(&self) {

    fn new() -> Bar {

fn call<T: Foo, F: Fn(T)>(f: F) {

fn main() {
    call::<Bar>(|p| p.say_hello());

I get the error "too few type parameters provided: expected 2 parameters, found 1 parameter", but as far as I understood, the type of the closure can't be named. What is the proper way of doing this?

in this case

    call::<Bar, _>(|p| p.say_hello());


You can use _ as a stand-in for types you want the compiler to infer: Rust Playground

Thank you!