Maybe call this `FunctionSignature` to avoid confusion with things like `java.security.Signature`?