Michael - 5 months ago 31

Scala Question

It looks like

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

^

Why is that ? Aren't they functors ?

Answer

Scalaz requires that objects follow the laws for `Functor`

s. It also prescribes to the "everything immutable" philosophy of code construction. That said, `Array`

is mutable, so they wouldn't create a `Functor`

instance for it. `Seq`

on the other hand is an abstract interface and it is unknown what the "correct" data type will be. That is, for `Seq`

how to know which underlying object to return and therefore not violate any laws?