scala - 选项既是函子又是单子?
问题描述
ScalaOption
既是单子又是函子?
据我了解,函子只是一种公开以下 API 的数据类型:
函子:
wrap (或
apply
),它接受一个原语并将其包装在函子内map
它需要一个函子,解开它,应用一些函数并重新包装它
Option
函子也是如此。因为我可以将 anOption
应用于原始给我Option[T]
。我还map
可以Option
获取函子内部的内容并重新打包内部Option
。
单子有什么不同?我曾认为 monad 也有一个apply
函数和一个map
函数。从这篇文章中我收集到一个 monad也有flatMap
? 哪个被定义为简单map
但没有在 monad 中重新包装结果?(或者是否map
没有在函子中重新包装结果?!)
由于Option
两者都提供map
,这flatMap
是否意味着Option
它既是函子又是单子?
解决方案
简短的回答:是的。
更长的答案:每个单子都是一个应用函子,每个应用函子都是一个函子。在面向对象的术语中:Monad <: Applicative <: Functor。
推荐阅读
- r - 如何按时间段总结一个小标题?
- paypal - 在没有服务器后端的静态 HTML/JS 网站上完成 PayPal 付款。如何渲染完成的支付页面?
- java - Java 数组列表
没有按要求工作 - qt - 如何向模型中没有的 QML ComboBox 添加额外的项目?
- python - 使用 Python 的 matplotlib 3D API 的轮廓问题
- typescript - 是否可以使用泛型类型来确定运行时功能?
- winforms - 类中的 Powershell winform 事件处理程序导致范围问题
- angular - 在 Angular Datatable 中隐藏几行
- vb.net - 如何将添加在图片框中的用户控件翻转 180 度?
- assembly - 汇编代码指令“pushq”不能将 64 位的东西压入堆栈?