看起来scalaz
为Functor
提供了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他们的算子?
答案 0 :(得分:6)
Scalaz要求对象遵循Functor
的法律。它还规定了一切不可变的&#34;代码构建哲学。也就是说,Array
是可变的,因此他们不会为它创建一个Functor
实例。另一方面,Seq
是一个抽象的界面,并且不知道&#34;正确的&#34;数据类型将是。也就是说,Seq
如何知道要返回哪个底层对象,因此不违反任何法律?