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