有人可以解释一下 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/