为什么 Scalaz 中没有 Array 的 Functor 实例
Why is there no Functor instance for Array in Scalaz
看起来 scalaz
为 List
提供了一个 Functor
实例,但没有为 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@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 要求对象遵循 Functor
秒的规律。它还规定了代码构造的 "everything immutable" 哲学。也就是说,Array
是可变的,因此他们不会为其创建 Functor
实例。另一方面,Seq
是一个抽象接口,不知道 "correct" 数据类型是什么。也就是说,对于 Seq
如何知道要 return 哪个基础对象从而不违反任何法律?
看起来 scalaz
为 List
提供了一个 Functor
实例,但没有为 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@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 要求对象遵循 Functor
秒的规律。它还规定了代码构造的 "everything immutable" 哲学。也就是说,Array
是可变的,因此他们不会为其创建 Functor
实例。另一方面,Seq
是一个抽象接口,不知道 "correct" 数据类型是什么。也就是说,对于 Seq
如何知道要 return 哪个基础对象从而不违反任何法律?