haskell - MonadWriter 类中的冗余
问题描述
我一直在阅读MonadWriter类的文档,我看到了这一点,writer
并且tell
可以根据彼此来编写。在我看来,如果类方法的行为与文档描述的一样,那么pass
可以用tell
and来编写listen
:
pass :: m (a, w -> w) -> m a
pass m = do
((a, f), w) <- listen m
tell $ f w
return a
我的理解正确吗?
解决方案
这结束了写作w <> f w
,但它应该写作f w
。
ghci
> import Control.Monad.Writer as W
> :{
pass m = do
((a, f), w) <- listen m
tell (f w)
return a
:}
> pass (writer ((0, map (+ 10)), [1])) :: Writer [Integer] Int
WriterT (Identity (0,[1,11]))
> W.pass (writer ((0, map (+ 10)), [1])) :: Writer [Integer] Int
WriterT (Identity (0,[11]))
推荐阅读
- android - 令人遗憾的 GPU 渲染配置文件只有光标闪烁
- swift - IOS 图表/MPAndroidChart。轴高
- html - 从 HTML 调用打字稿文件中的函数不显示返回变量
- python - Django - 登录的用户未在 admin.py 中填充
- kubernetes - 如何使用模板生成器生成 kubernetes yaml 文件?
- python-3.x - 如何循环从 python-docx 获得的列表列表,其中每个列表都是一个表,并将表写入单独的工作表
- amazon-web-services - 如何从限制对特定 API 端点访问的 lambda 授权方生成 IAM 策略?
- sas - 期待 SAS 中的算术运算符?
- c# - 将实体分页类映射到 dto 分页类
- python - 无法播放 IBM Watson 的 TTS(文本到语音)生成的 WAV 文件