不理解 scalaz 中的行为

Behavior in scalaz not understood

来自 ScalaZ 新手的问题。 我不太明白:

1.some

或相关的析取:

"Success!".right 

工作。 我找不到任何允许上述行为的隐式转换。 我知道如何使用它们,但我对它们的实现很感兴趣。 谢谢。

包含方法some的class是OptionIdOps

final class OptionIdOps[A](self: A) {
  def some: Option[A] = Some(self)
}

如果你查看定义内部,你会看到一个额外的隐式可用于特征定义中的任何类型 AOptionIdOps

trait ToOptionIdOps {
  implicit def ToOptionIdOps[A](a: A) = new OptionIdOps(a)
}

事实上,编译器会:

val someOfInt = new OptionIdOps(1).some