Scala 什么是函子偏差?

Scala 什么是函子偏差?,scala,functional-programming,scalaz,Scala,Functional Programming,Scalaz,接下来,我遇到了“右偏函子”和“左偏函子”。我试着自己做一些研究,但我仍然无法理解两者之间的区别,以及函子偏差到底是什么 有人能概述一下什么是函子偏差,右偏差和左偏差之间的区别,以及这将如何有用的例子吗?如果斯卡拉可以用于例子,那么Scala的 函子和C++中的函数不完全相同。它是一个类别,具有如下操作 def map[A, B](fa: F[A])(f: A => B): F[B] 这将F[A]转换成F[B],给定一个从A到B的变压器 例如,一个选项是一个函子,它在定义内部值时将转

接下来,我遇到了“右偏函子”和“左偏函子”。我试着自己做一些研究,但我仍然无法理解两者之间的区别,以及函子偏差到底是什么


有人能概述一下什么是函子偏差,右偏差和左偏差之间的区别,以及这将如何有用的例子吗?如果斯卡拉可以用于例子,那么Scala的

函子和C++中的函数不完全相同。它是一个类别,具有如下操作

  def map[A, B](fa: F[A])(f: A => B): F[B]
这将F[A]转换成F[B],给定一个从A到B的变压器

例如,一个选项是一个函子,它在定义内部值时将转换应用于该值。列表是一个函子,它将变换器应用于每个元素,等等

现在,考虑一下,比如[A,B]。假设,我们想为它定义一个函子。它有两个类型参数,但函子只有一个,所以我们必须选择函子将对哪个类型参数进行操作。这两种方法都很常见,其中Right是默认情况,Left是异常情况或错误情况。所以,认为它是正确的是很自然的:


这有点像Option.map:当其中一个为右时,它应用转换器,否则,只返回未触及的左。因此,可以说,要么是右偏置函子,因为它只在右边操作。Scala中的

< P>函子与C++中所称的完全不同。它是一个类别,具有如下操作

  def map[A, B](fa: F[A])(f: A => B): F[B]
这将F[A]转换成F[B],给定一个从A到B的变压器

例如,一个选项是一个函子,它在定义内部值时将转换应用于该值。列表是一个函子,它将变换器应用于每个元素,等等

现在,考虑一下,比如[A,B]。假设,我们想为它定义一个函子。它有两个类型参数,但函子只有一个,所以我们必须选择函子将对哪个类型参数进行操作。这两种方法都很常见,其中Right是默认情况,Left是异常情况或错误情况。所以,认为它是正确的是很自然的:


这有点像Option.map:当其中一个为右时,它应用转换器,否则,只返回未触及的左。因此,可以说两者都是右倾的函子,因为它只在右边运行。

不幸的是,函子这个词最终在不同的社区以完全不同的方式使用。C++函子不是标准的ML函数,它不是Scala/Haskell/范畴理论函子,不幸的是,函子在不同的社区中以不同的方式被使用。C++函子不是标准的ML函数,不是Scala/Haskell/范畴理论函子。我试图使用您提供的代码,但在使用IDE甚至通过命令行使用SBT进行编译时遇到了很多麻烦。我想这可能是因为我们没有像编译器预期的那样重写map?另外,我们不需要在指定了t的函子中指定其他类型参数,如?、A和B吗?谢谢,这样更有意义。我试图使用您提供的代码,但在使用IDE甚至通过命令行使用SBT进行编译时遇到了很多麻烦。我想这可能是因为我们没有像编译器预期的那样重写map?另外,我们是否需要在指定t的函子中指定其他类型参数,如?、A和B?