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

时间:2019-04-06 10:01:22

标签: python haskell python-typing

在Haskell中,foldmfoldl的单子版本)就是这种类型。

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],但这是无效的。有办法吗?

1 个答案:

答案 0 :(得分:2)

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