¿Cómo hacer cosas iguales a `impl implícito` anidado?

function A que toman unfunction B como parámetro, nuevamente lafunction B tomarfunction C como parámetro. Intento la sintaxis como a continuación, pero esto me da un error:

fn a(b: impl Fn(impl Fn() -> ()) -> ()) -> () {
 // ...
}  
error[E0666]: nested `impl Trait` is not allowed
 --> src/main.rs:2:21
  |
2 |     fn a(b: impl Fn(impl Fn() -> ()) -> ()) -> () {
  |             --------^^^^^^^^^^^^^^^-------
  |             |       |
  |             |       nested `impl Trait` here
  |             outer `impl Trait`

Por alguna razón, no puedo usar&dyn palabra clave:

fn a(b: impl Fn(&dyn Fn() -> ()) -> ()) -> () {
 // ...
} 

¿Hay otras formas de hacer esto?

Y no sé por quéanidadoimpl Trait causa un error.

Respuestas a la pregunta(1)

Su respuesta a la pregunta