- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一次又一次地阅读了“有效”这个词,但我仍然无法明确定义它的含义。我假设正确的上下文是有效的计算,但我也看到了有效的术语 values )
我曾经认为有效意味着有副作用。但是在 Haskell 中没有副作用(在某种程度上 IO 除外)。仍然到处都有有效的计算。
然后我读到 monad 用于创建有效的计算。我可以在 State
的上下文中理解这一点。单子(monad)。但我在 Maybe
中没有看到任何副作用单子(monad)。一般来说,在我看来,包装类似函数的东西的 Monad 比只包装一个值的 Monad 更容易被视为产生副作用。
说到Applicative
仿函数我更迷茫了。我总是将应用仿函数视为 map
的一种方式具有多个参数的函数。我在这里看不到任何副作用。或者有效果和有效果之间有区别吗?
最佳答案
一个 side effect是与其环境的可观察交互(除了计算其结果值)。在 Haskell 中,我们努力避免具有这种副作用的函数。这甚至适用于 IO
行动:当 IO
评估 Action ,不执行副作用,仅当 IO
中规定的 Action 时才执行。值在 main
内执行.
但是,当使用与组合计算相关的抽象时,例如应用仿函数和单子(monad),在某种程度上区分实际值和“剩余”是很方便的,我们通常称之为“效果”。特别是,如果我们有一个类型 f
的 kind * -> *
,然后在 f a
a
一部分是“值(value)”,而“剩下的”就是“效果”。
我故意引用了这些术语,因为没有精确的定义(据我所知),它只是一个口语定义。在某些情况下,根本没有值,或者有多个值。例如 Maybe
“效果”是对于 []
可能没有值(并且计算被中止)。 “效果”是有多个(或零)值。对于更复杂的类型,这种区分可能更加困难。
“效果”和“值(value)”之间的区别并不真正取决于抽象。 Functor
, Applicative
和 Monad
只需给我们工具,我们可以用它们做什么(Functor
允许修改内部值,Applicative
允许组合效果,Monad
允许效果依赖于先前的值)。但在 Monad
的上下文中s,创建一个正在发生的事情的心理画面稍微容易一些,因为单子(monad) Action 可以“看到”先前计算的结果值,正如
(>>=) :: m a -> (a -> m b) -> m b
a
类型的值,所以我们可以想象“之前的计算产生了一些影响,现在有了它的结果值我们可以做一些事情”。
关于haskell - "effectful"到底是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33386622/
这对你们来说可能很简单,但由于我是java新手,所以我想知道实际上什么是 接下来的部分会发生什么? if (args.length > 0) { file = args[0]; } publi
在我的 View Controller 中,我将 UITapGestureRecognizer 添加到 self.view。我在 self.view 之上添加了一个小 View 。当我点击小 View
我今天尝试从 Obj-C 开始并转到 Swift,我正在阅读文档。我试图在 Swift 中创建一个简单的 IBOutlet,但它不断给我这些错误。 View Controller 没有初始化器 req
我正在尝试使用 VIM 完成(字典和当前缓冲区),但我遇到了问题?和 !在方法名称的末尾。我能以某种方式向 vim 解释方法名称(基本上是单词)最后只能有它,而且只有一个,即 method_name
我是一名优秀的程序员,十分优秀!