选项既是函子又是单子?

时间:2019-05-29 21:24:49

标签: scala monads functor

Scala的Option是单子还是函子?

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

功能键

  • wrap(或apply),它接受一个原语并将其包装在函子中

  • map,其中需要一个函子,将其解包,应用某些功能,然后将其重新包装

因此Option是一个函子。因为我可以将Option应用于给我Option[T]的图元。我还可以在mapOption来获得仿函数中的内容,并在Option中重新打包。

monad有何不同?我以为monad也具有apply函数和map函数。从this article中,我得知一个单子flatMap吗?哪个被简单定义为map但没有将结果重新包装在monad中? (或者是map,而没有将结果重新包装在函子中!!)

由于Option同时提供mapflatMap,这是否意味着Option既是函子又是单子?

1 个答案:

答案 0 :(得分:3)

简短的回答:是的。

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