Haskell の partitionEithers を(汎用化したものを) Scala で

結局現在のScalaz 7.0.0-M7 には存在しなそう。

作ったら一応できた?(scalaz 7.0.0-M7)

def f[A, B, F[_]: MonadPlus](es: F[A \/ B]) = (for(-\/(y) <- es)yield y, for(\/-(x) <- es)yield x)

本当は、partitionEithersではなく、ScalazのValidationのListがあったときに、partitionValidation的なことをしたかったんですが・・・。上記のを汎用化して、EitherにもValidationにも対応させることできないですかね?*1
*2

追記:汎用化できたので、Scalazにpull reqした
https://github.com/scalaz/scalaz/pull/460

*1:EitherとValidationの共通の型クラス・・・ https://github.com/scalaz/scalaz/blob/v7.0.0-M7/core/src/main/scala/scalaz/Bitraverse.scala Bitraverse とか(?)を使って

*2: Bicopointed もしくは Bicomonad 的なものがないと無理?