以下のpull reqの意味が最初よくわかってなかったのだけど、さっき試して理解したのでメモ
https://github.com/scalaz/scalaz/pull/1021
scala> import scalaz._, syntax.either._ import scalaz._ import syntax.either._ scala> class A; class B; class C; class D; defined class A defined class B defined class C defined class D scala> val ab = (new A).right[B] ab: scalaz.\/[B,A] = \/-(A@24e0b258) scala> val cd = (new C).right[D] cd: scalaz.\/[D,C] = \/-(C@11da9f6e)
ここ ↑ まで下準備
変更前
scala> ab orElse cd res0: scalaz.\/[Object,Object] = \/-(A@24e0b258)
変更後
scala> ab orElse cd res0: scalaz.\/[D,Object] = \/-(A@686cb818)
変更前だと、余計な制約があることによって、もっと型の範囲を狭くできるのに必要以上に広くなってしまう(AnyRefやAnyなどになってしまう)ということですね