看起来scalaz
为List
提供了一个Functor
实例,但没有为Array
提供它(或者序列
)。
scala> val fa = Functor[Array]
<console>:17: error: could not find implicit value for parameter F: scalaz.Functor[Array]
val fa = Functor[Array]
^
scala> val fl = Functor[List]
fl: scalaz.Functor[List] = scalaz.std.ListInstances$$anon$1@20c4b59
scala> val fl = Functor[Seq]
<console>:17: error: could not find implicit value for parameter F: scalaz.Functor[Seq]
val fl = Functor[Seq]
^
这是为什么呢?他们不是仿函数吗?
最佳答案
Scalaz 要求对象遵循仿函数法则。它还规定了代码构建的“一切都是不可变的”哲学。也就是说,Array 是可变的,因此他们不会为其创建 Functor 实例。另一方面,Seq
是一个抽象接口(interface),并且不知道“正确”的数据类型是什么。也就是说,对于 Seq
如何知道要返回哪个底层对象,从而不违反任何法律?
关于arrays - 为什么 Scalaz 中没有 Array 的 Functor 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38702361/