我目前正在通過在 python 中撰寫一個 monad 庫來自學函式式編程。而且我在型別提示方面遇到了麻煩。例如,Haskell 中有一個帶有簽名的函式 filterM
filterM :: (a -> m Bool) -> [a] -> m [a]
理想情況下,如果 python 可以通過在 TypeVar 之后放置一個括號來匹配“子型別”的模式,那么我應該可以用這樣的方法來做到這一點:
T = TypeVar('T')
M = TypeVar('M', bound=Monad)
def filterM(filter_func: Callable[[T], M[bool]], iterable: list[T]) -> M[list[T]]
但似乎上述語法不起作用。事實上,似乎根本沒有辦法“提取”我傳入的 monad 型別。假設我傳入 a Callable[[int], Maybe[bool]],我取得的最好成績是將整體Maybe[bool]視為單個 TypeVar。那么就沒有辦法將其轉換為正確的輸出型別Maybe[list[int]]。
uj5u.com熱心網友回復:
目前,您想要的無法完成。你必須制定一個不需要它的計劃。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/462869.html
下一篇:消失的應用程式?[復制]
