haskell - 什么是(复合)效果(可能表示为 Monad+Monad 变形金刚)?准确、清晰、简短的答案/定义?
问题描述
动机:“功能程序”专注于“纯”,我们都知道“纯”是什么:引用透明、“无效果”等......
但问题是,这只是硬币的一面。
我还没有看到效果是什么的明确定义。
例如,在 Haskell 中,实际上每个非平凡的“Monad”都可以被视为一种“效果”,并且那里有无数种特定的 monad……问题是我看不出它们之间有什么联系?
说:([]
列表)Monad vs State
monad vs IO
monad vs Future
monad 等等……这些效果如何?
他们有什么共同点 ?
我直观地理解这些都是“效果”,但如何?为什么 ?是什么连接它们?当这些类型的值(比如说[a]
)本身是“无影响”/纯/不可变的?
我正在寻找的答案不是“任何不透明的东西”。
那是一个“否定答案”,我正在寻找相反的“答案类型”,它告诉我什么是效果而不是什么不是。
尤其是问题在于:IO
是“终极”效果。现在,我们/可以/应该在什么意义上划分IO
为“非交互”的“子效果”=>这将我们引向一个可能的答案:Monad Transformers。他们试图解决合成效果的问题,但他们自己并没有回答这个问题:什么是效果?更重要的是,我应该如何将“大/宽效果”(例如IO
)划分为“较小”/“较窄”效果,例如[]
, Future
, Cont
, Writer
, Reader
,State
等Maybe
...?
问题的答案:什么是效果应该作为解决上述“如何划分IO
”为“子”/更简单效果等问题的可能灵感?
谢谢。
解决方案
推荐阅读
- r - 如何使用 Rugarch 保留原始日期
- javascript - 多文件夹命令处理程序
- while-loop - 如何创建一个一直持续到 5 个变量都等于 10 的 while 循环
- python - 在自动安装 Pylance 之前,我有一个运行良好的 python django 应用程序。现在我收到一个错误:发生异常:
- python - 如何将数据从 ESP8266 发送到 Django 本地服务器
- python - tensorflow 错误:未能找到可以处理输入的数据适配器:
, ( 包含类型的值 - git - GIT 本地和远程工作流
- python - 如何将列表中的数字更改为另一个数字
- html - Angular 10 错误 NG8002 无法绑定对象
- django - 循环输入字段名称