arrays - 为什么 Scalaz 中没有 Array 的 Functor 实例

标签 arrays scala functor scalaz

看起来scalazList提供了一个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/

相关文章:

c++ - 在运行时指定的多个谓词

javascript - 如何 console.table(array) 只显示数组元素,而不是方法(Ember Array)

php - 我可以将数组绑定(bind)到 PDO 查询中的 IN() 条件吗?

java - 如何解决play framework 2.2.1 connect timeout异常问题

c++ - 将 C++ 比较器仿函数作为参数传递时出现问题

c++ - 这是文档中的一个小错误还是我遗漏了什么?

arrays - 使用 2D 索引矩阵索引 4D 数组

javascript - 循环遍历数组时需要有关条件的帮助

斯卡拉 : Type Mismatch

java - 斯卡拉。 float 的奇怪结果