# Code de la lib, pas modifiable
class CustomType:
    foo: str
    def __init__(self, foo: str):
        self.foo = foo
def lib_func(foo: str) -> CustomType:
    return CustomType(foo)
# Code perso
from typing import TypeVar, Generic, Callable, ParamSpec
T = TypeVar("T")
P = ParamSpec("P")
class my_func(Generic[P, T]):
    def __init__(self, func: Callable[P, T]):
        self.func = func
    def __call__(self, foo: T) -> None:
        print(f"I'm doing something with {foo} of type {reveal_type}")
data = lib_func("test")
result = my_func(lib_func)(data)
reveal_type(my_func(lib_func))            # ● Type of "my_func(lib_func)" is "my_func[(foo: str), CustomType]" 
reveal_type(my_func(lib_func)(data)) # ● Type of "my_func(lib_func)(data)" is "None"