Py学习  »  Python

如何在Python中表示参数化类型?

RussAbbott • 5 年前 • 1751 次点击  

在哈斯克尔, foldm foldl )有这种类型。

foldM :: (Monad m) => (a -> b -> m a) -> a -> [b] -> m a

(见 this

Python等价物可以这样声明。

a = TypeVar('a')
b = TypeVar('b')
def foldM(f: Callable[[a, b], Monad], acc: a, xs: List[b]) -> Monad:
    ...

Monad 按类型参数化 a Monad[a] ,但这是无效的。有办法吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53974
 
1751 次点击  
文章 [ 1 ]  |  最新文章 5 年前
gmds
Reply   •   1 楼
gmds    6 年前

拥有 Monad 继承自 Generic

from typing import TypeVar, List, Callable, Generic

a = TypeVar('a')
b = TypeVar('b')

class Monad(Generic[a]):
    # your code here
    pass

def foldM(f: Callable[[a, b], Monad[a]], acc: a, xs: List[b]) -> Monad[a]:
    # your code here
    pass