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

时间:2016-08-01 15:12:22

标签: arrays scala functor scalaz

看起来scalazFunctor提供了List个实例,但没有为Array(或Seq)提供此实例。

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]
                       ^

为什么? Aren他们的算子?

1 个答案:

答案 0 :(得分:6)

Scalaz要求对象遵循Functor的法律。它还规定了一切不可变的&#34;代码构建哲学。也就是说,Array是可变的,因此他们不会为它创建一个Functor实例。另一方面,Seq是一个抽象的界面,并且不知道&#34;正确的&#34;数据类型将是。也就是说,Seq如何知道要返回哪个底层对象,因此不违反任何法律?