# \`Callable\` isn't a special form

**URL:** <https://discuss.python.org/t/callable-isnt-a-special-form/106407>\
**Category:** Typing\
**Tags:** typing, typing-spec\
**Created:** [March 6, 2026, 2:12am UTC](https://discuss.python.org/t/callable-isnt-a-special-form/106407 "2026-03-06T02:12:26Z")\
**Posts on this page:** 1\
**Showing post:** 5

<div class="post-metadata">

**Author:** ![KotlinIsland](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/kotlinisland/32/19433_2.png) [@KotlinIsland](https://discuss.python.org/u/KotlinIsland)\
**Post date:** [March 9, 2026, 2:39am UTC](https://discuss.python.org/t/callable-isnt-a-special-form/106407/5 "2026-03-09T02:39:47Z")

</div>

> [@jorenham](#):
>
> `**InTs` is a `ParamSpec`, but as far as I’m aware, `ParamSpec` is always invariant, and cannot be defined contravariant.

> [@Parameter specifications should have variance](https://discuss.python.org/t/parameter-specifications-should-have-variance/106452):
>
> Code sample in [basedpyright playground](https://basedpyright.com/?typeCheckingMode=all&reportUnannotatedClassAttribute=false&code=GYJw9gtgBALgngBwJYDsDmUkQWEMoDCAhgDYlEBGJApgDRQAK4MYAxmCfSAK4oxbUA%2BqwAW1VgGtKNAFByAAjz4DhYydOozW5AM47CRFMTIBtAFRmAkigb0A8txgAVALoAKJmBbsSASgBcMlDBUPI6MET8rBDUMCJgACZBIQnUwFCCwqQkmW5mRCBoOv5Q1gwAdAVF9BYSAO5VxaU25fWNvlAAtAB8UA7OJeVDcqnpwACMbhES1DqCYBQAVuIwJcRG2SYmC8usMC70AHJgKNQuAcnB07OCqKsGG6YmdwdQx6cuUAC8sEQzczsVnIZKMoMAAExTP43QF7NbZDRbWH7I4nM4XEK-f63PjwsiI558V7vM7fLEwpYrYIAYigTkQ1CgCAKRBiMGoICgACIyvJ1sYSFzMPpUAA3ApIQwwegURzctzI3xCpD6FBeWBiKA6VmMoj6LluO5KoA) from typing import Callable, Protocol, runtime\_checkable @runtime\_checkable class CanCall[\*\*InP, OutT](Protocol): @staticmethod def \_\_call\_\_(\*args: InP.args, \*\*kwargs: InP.kwargs) -\> OutT: ... def f1(takes\_object: CanCall[[object], None]): takes\_int: CanCall[[int], None] = takes\_object def f2(takes\_object: Callable[[object], None]): takes\_int: Callable[[int], None] = takes\_object # Type parameter "InP@CanCall" is invariant, but "(obje…

---

_[View the full topic](https://discuss.python.org/t/callable-isnt-a-special-form/106407)._
