scala> val s1 = 1.success[Int]
s1: scalaz.Validation[Int,Int] = Success(1)
scala> val s2 = 2.success[Int]
s2: scalaz.Validation[Int,Int] = Success(2)
scala> val e1 = 1.fail[Int]
e1: scalaz.Validation[Int,Int] = Failure(1)
scala> val e2 = 2.fail[Int]
e2: scalaz.Validation[Int,Int] = Failure(2)
scala> s1 |+| s2
res0: scalaz.Validation[Int,Int] = Success(3)
scala> e1 |+| s2
res1: scalaz.Validation[Int,Int] = Success(2)
scala> s1 |+| e2
res2: scalaz.Validation[Int,Int] = Success(1)
scala> e1 |+| e2
res3: scalaz.Validation[Int,Int] = Failure(3)
scala> val s1 = 1.success[Int].fail
s1: scalaz.FailProjection[Int,Int] = scalaz.Validation$$anon$18@30b8b0c9
scala> val s2 = 2.success[Int].fail
s2: scalaz.FailProjection[Int,Int] = scalaz.Validation$$anon$18@1334a8fd
scala> val e1 = 1.fail[Int].fail
e1: scalaz.FailProjection[Int,Int] = scalaz.Validation$$anon$18@435ea4f2
scala> val e2 = 2.fail[Int].fail
e2: scalaz.FailProjection[Int,Int] = scalaz.Validation$$anon$18@55037ead
scala> (s1 |+| s2) validation
res4: scalaz.Validation[Int,Int] = Success(1)
scala> (e1 |+| s2) validation
res5: scalaz.Validation[Int,Int] = Success(2)
scala> (s1 |+| e2) validation
res6: scalaz.Validation[Int,Int] = Success(1)
scala> (e1 |+| e2) validation
res7: scalaz.Validation[Int,Int] = Failure(3)