斯卡拉 – 第二个莫纳德法:单位
发布时间:2020-12-16 18:25:27 所属栏目:安全 来源:网络整理
导读:我在 scala的Monads上阅读 James Iry’s blog post.我在第三部分,我对他关于单位的monad第二定律的描述感到困惑.特别是这个说法: unit(x) flatMap f = f(x) 当我应用我的心理例子,这是jame之前的monadic类型的例子,这似乎永远不会成功 val x = 1 val f = (_
我在
scala的Monads上阅读
James Iry’s blog post.我在第三部分,我对他关于单位的monad第二定律的描述感到困惑.特别是这个说法:
unit(x) flatMap f = f(x) 当我应用我的心理例子,这是jame之前的monadic类型的例子,这似乎永远不会成功 val x = 1 val f = (_:Int) * 2 f(x) == 2 //true List(x) flatMap f == 2 //fail Some(x) flatMap f == 2 //fail 事实上,由于类型问题,它们甚至无法编译. 澄清我明白为什么这些都失败了.我理解如何修复它们以便编译. 我的困惑是,这些似乎与文章中提出的理论相冲突.我缺少一步吗?这些类型不是真正的monad吗?标题为“Monads第二定律:单位”的部分是否不正确? 解决方法
Scala的flatMap需要一个函数来返回一个集合,而不是一个返回单个元素的函数,就像你的函数f一样.
使用地图: List(x) map f 或让你的函数返回一个集合: val f = (x: Int) => List(x * 2) List(x) flatMap f 请注意,它也将返回一个集合,而不是一个整数(您将获得List(2),而不仅仅是2). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |