
I collected up some examples of existing Callables and what they look like under each of the conventions we've discussed. I also have a simple example of a type that Callable can't express in each of the conventions, as well as some examples of stubs that might be used with each. The examples are a little hard to follow in email so I put them in a gist: https://gist.github.com/stroxler/119d2586a04ec35940d449fb78801b2e One thing I want to draw attention to is that stub syntax is very natural for specifying the most specific possible type for a given function signature (because a stub is 1:1 with an implementation). When we're annotating callable types, which is something we would only do when many implementations may be useful, we'll tend to use much more general types. Whether this is a reason to adjust the syntax isn't clear, but I do think it's important to realize that some things very rarely used in implementations (like positional-only args) will be extremely common to use in type annotations.