2017-03-14 72 views
2

這裏是來自ScalaZ neophite的問題。 我不太明白如何:scalaz中的行爲不明白

1.some 

或脫節相關:

"Success!".right 

工作。 我無法找到任何允許上述行爲的隱式轉換。 我知道如何使用它們,但我對它們的實現感興趣。 謝謝。

回答

3

含有方法some類是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 
+1

感謝Yuval,像往常一樣,你的回答非常翔實 – Adrian