gpt4 book ai didi

scala - 第二单子(monad)定律 :Unit

转载 作者:行者123 更新时间:2023-12-03 18:26:51 27 4
gpt4 key购买 nike

我正在阅读 James Iry's blog post在 Scala 中的 Monads 上。我在第三部分,我对他关于单元的单子(monad)第二定律的描述感到困惑。特别是这种说法:

 unit(x) flatMap f = f(x)

当我应用我的心理示例时,这些示例是 jame 以前的一元类型示例,这似乎永远不会奏效
 val x = 1
val f = (_:Int) * 2
f(x) == 2 //true
List(x) flatMap f == 2 //fail
Some(x) flatMap f == 2 //fail

事实上,由于类型问题,它们甚至无法编译。

为了澄清,我理解为什么这些都失败了。我了解如何修复它们以便它们编译。

我的困惑是,这些似乎与文章中提出的理论相冲突。我缺少一个步骤吗?这些类型不是真正的单子(monad)吗?题为“单子(monad)第二定律:单位”的部分不正确吗?

最佳答案

斯卡拉的flatMap需要一个返回集合的函数,而不是返回单个元素的函数,比如你的函数 f .

使用 map :

List(x) map f

或者让你的函数返回一个集合:
val f = (x: Int) => List(x * 2)

List(x) flatMap f

请注意,它还将返回一个集合,而不是单个整数(您将得到 List(2) ,而不仅仅是 2 )。

关于scala - 第二单子(monad)定律 :Unit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10949328/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com