Ah. Pre-1.0 we didn&#x27;t have the Fn* traits. Closures were boxed (two closures with the same signature would have the same type due to this), and closures&#x2F;functions were different types. You could declare an argument to be a closure or a function but not both.<p>Post &quot;unboxed closures&quot;, closures are now stored on the stack (thus they usually optimize away; for example if you use an iterator with a bunch of adapters like filter&#x2F;map it will optimize down to a for loop). Each closure has a unique anonymous type (you can box them if you want them to have the same type), and all closures implement one or more of the Fn* traits, as do function pointers. So arguments can be generic over all callables, and you can pass in a closure or a function or your own custom callable.