scala> Vector(1,2) == Vector(1,2)
res0: Boolean = true
こちらは通常の比較なので問題なし。
scala> Vector(1,2) === Vector(1,2)
<console>:14: error: could not find implicit value for parameter F0: scalaz.Equa
l[scala.collection.immutable.Vector[Int]]
Vector(1,2) === Vector(1,2)
^
エラーとなりました。
scala> Vector(1,2) =/= Vector(1,2)
<console>:14: error: could not find implicit value for parameter F0: scalaz.Equa
l[scala.collection.immutable.Vector[Int]]
Vector(1,2) =/= Vector(1,2)
^
こちらもエラーとなりました。
scala> mzero[Vector[Int]]
<console>:14: error: could not find implicit value for parameter F: scalaz.Monoi
d[Vector[Int]]
mzero[Vector[Int]]
^
mzeroもエラーとなります。
object vector {
implicit object VectorInstance extends Monoid[Vector[Int]] with Equal[Vector[Int]] {
def zero = Vector[Int]()
def append(v1: Vector[Int], v2: => Vector[Int]) = v1 ++ v2
def equal(v1:Vector[Int], v2:Vector[Int]) = v1 == v2
}
}
scala> :load script\vectorMonoid.scala
Loading script\vectorMonoid.scala...
defined module vector
scala> import vector._
import vector._
scala> Vector(1,2) == Vector(1,2)
res4: Boolean = true
scala> Vector(1,2) === Vector(1,2)
res5: Boolean = true
scala> Vector(1,2) =/= Vector(1,2)
res6: Boolean = false
scala> mzero[Vector[Int]]
res7: Vector[Int] = Vector()
scala> Vector(1,2) |+| Vector(1,2)
res8: scala.collection.immutable.Vector[Int] = Vector(1, 2, 1, 2)
以下のコードも試した
object vector {
implicit def vectorMonoid[A]: Monoid[Vector[A]] = new Monoid[Vector[A]] {
def append(f1: Vector[A], f2: => Vector[A]) = f1 ++ f2
def zero: Vector[A] = VectorA
}