Scala Functor 和 Monad 的区别

标签 scala functional-programming

有人可以解释一下 Scala 上下文中 Functor 和 Monad 之间的区别吗?

最佳答案

Scala 本身并没有那么强调 Functor 和 Monad 术语。我猜使用 map 是仿函数端,使用 flatMap 是 Monad 端。

对于我来说,寻找和玩弄 scalaz迄今为止,这是在 scala 上下文(相对于 haskell 上下文)中了解这些函数概念的最佳途径。两年前,当我开始使用 scala 时,scalaz 代码对我来说是胡言乱语,然后几个月前,我再次开始寻找,我意识到它确实是那种特定风格的函数式编程的干净实现。

例如Monad实现表明 monad 是一个尖头 functor因为它扩展了 Pointed 特征(以及 Applicative 特征)。我邀请你去看一下代码。它在源代码本身中有链接,并且很容易跟踪链接。

所以仿函数更加通用。 Monad 提供了额外的功能。要了解当您有仿函数或 monad 时可以做什么,您可以查看 MA

您将看到需要隐式仿函数(特别是应用仿函数)的实用程序方法,例如 sequence 以及有时需要完整 monad 的方法,例如 replicateM

关于Scala Functor 和 Monad 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8460594/

相关文章:

scala - 什么是 Applicative Builder

python - 如果多次使用 RDD 是否需要缓存?

scala - 找不到spark-sql中的聚合函数

swing - Scala Wrapper 类通过扩展 Component 和 SequentialContainer.Wrapper 特征,我对特征有正确的理解吗?

f# - "int -> int -> int"这在 F# 中是什么意思?

haskell - 无限列表上的折叠行为

scala - 静态方法更可组合吗?

scala - Scala 中的无点风格案例

scala - 适合使用 Futures 和 Promises 进行延迟初始化吗?

javascript - recompose 库中的 Compose 方法