So by wrapping arguments with SAM type decorator we allow the use of functions in place of 3rd party interfaces. (In general the example can implement passing sam.inst to an java.util.concurrent Executor)

What if we don't want the wrapping? Or if we want to use a 3rd party method that accepts the interface?

Unfortunately, that's as far as type inference will go. If we want our example method to accept arguments of the interface directly (def example[T](callable: Callable[T]) = ...) then the compiler will not search for companion objects of the involved types (e.g., convert a function to Callable[OurType]). In this case, we're left with requiring the client code to import an implicit conversion into scope, or extend a class that provides it: