首页 > 解决方案 > 选项既是函子又是单子?

问题描述

ScalaOption既是单子又是函子?

据我了解,函子只是一种公开以下 API 的数据类型:

函子

Option函子也是如此。因为我可以将 anOption应用于原始给我Option[T]。我还map可以Option获取函子内部的内容并重新打包内部Option

单子有什么不同?我曾认为 monad 也有一个apply函数和一个map函数。从这篇文章中我收集到一个 monadflatMap? 哪个被定义为简单map但没有在 monad 中重新包装结果?(或者是否map没有在函子中重新包装结果?!)

由于Option两者都提供map,这flatMap是否意味着Option它既是函子又是单子?

标签: scalamonadsfunctor

解决方案


简短的回答:是的。

更长的答案:每个单子都是一个应用函子,每个应用函子都是一个函子。在面向对象的术语中:Monad <: Applicative <: Functor。


推荐阅读