Validation を Monoid/SemiGroup として使用できるという印象を受けました。scala 2.9.2 および scalaz 7 スナップショットで次のコードを試しました。
import scalaz._
import Scalaz._
val success1 = 1.success
val success2 = 2.success
val failureA = "A".fail
val failureB = "B".fail
success1 |+| success2
<console>:16: error: diverging implicit expansion for type scalaz.Semigroup[scalaz.Validation[Nothing,Int]]
starting with method validationSemigroup in trait ValidationInstances
success1 |+| success2
^
<console>:16: error: value |+| is not a member of scalaz.Validation[Nothing,Int]
success1 |+| success2
私は期待していたSuccess(3)
それから
failureA |+| failureB
res1: scalaz.Validation[java.lang.String,Nothing] = Failure(AB)
期待通りに与える
と
success1 |+| failureA
期待どおりに失敗します
<console>:16: error: diverging implicit expansion for type scalaz.Semigroup[scalaz.Validation[Nothing,Int]]
starting with method validationSemigroup in trait ValidationInstances
success1 |+| failureA
^
<console>:16: error: value |+| is not a member of scalaz.Validation[Nothing,Int]
success1 |+| failureA
なぜ動作|+|
しSuccess
ないのですか?それはバグですか、それともここで何かを見逃しましたか