首页 > 解决方案 > 什么是(复合)效果(可能表示为 Monad+Monad 变形金刚)?准确、清晰、简短的答案/定义?

问题描述

动机:“功能程序”专注于“纯”,我们都知道“纯”是什么:引用透明、“无效果”等......

但问题是,这只是硬币的一面。

我还没有看到效果是什么的明确定义。

例如,在 Haskell 中,实际上每个非平凡的“Monad”都可以被视为一种“效果”,并且那里有无数种特定的 monad……问题是我看不出它们之间有什么联系?

说:([]列表)Monad vs Statemonad vs IOmonad vs Futuremonad 等等……这些效果如何?

他们有什么共同点 ?

我直观地理解这些都是“效果”,但如何?为什么 ?是什么连接它们?当这些类型的值(比如说[a])本身是“无影响”/纯/不可变的?

我正在寻找的答案不是“任何不透明的东西”。

那是一个“否定答案”,我正在寻找相反的“答案类型”,它告诉我什么是效果而不是什么不是。

尤其是问题在于:IO是“终极”效果。现在,我们/可以/应该在什么意义上划分IO为“非交互”的“子效果”=>这将我们引向一个可能的答案:Monad Transformers。他们试图解决合成效果的问题,但他们自己并没有回答这个问题:什么是效果?更重要的是,我应该如何将“大/宽效果”(例如IO)划分为“较小”/“较窄”效果,例如[], Future, Cont, Writer, Reader,StateMaybe...?

问题的答案:什么是效果应该作为解决上述“如何划分IO”为“子”/更简单效果等问题的可能灵感?

谢谢。

标签: haskellfunctional-programmingside-effects

解决方案


推荐阅读