作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在通过在 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 类型。假设我通过
Callable[[int], Maybe[bool]]
,我取得的最好成绩是把整个
Maybe[bool]
作为单个 TypeVar。那么就没有办法将其转换为正确的输出类型
Maybe[list[int]]
.
最佳答案
Currently, what you want cannot be done.你必须制定一个不需要它的计划。
关于python - 是否可以在 Python 中正确键入提示 filterM 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71757452/
我试图通过附加一个数字来查找目录名称,直到找到一个尚不存在的名称: head filterM (fmap not . fexists_) [ getDatedDir t d n | n >= \ca
我目前正在通过在 python 中编写一个 monad 库来自学函数式编程。而且我在类型提示方面遇到了麻烦。例如,Haskell 中有一个带有签名的函数 filterM filterM :: (a -
我对Haskell优化在内部的工作方式不太了解,但我一直在使用过滤器,希望它们可以被优化为等效于C++的简单过滤器。例如 mapM_ print $ filter (\n -> n `mod` 2 =
简而言之:您将如何过滤 Map 的元素? , 或 Set在单子(monad)上 Haskell中的谓词? 我可以想到两种可能的方法: a) 通过列表和 filterM 往返(可能效率不高): filt
我是一名优秀的程序员,十分优秀!