2016-01-20 19 views
5

暗黙チェーン全体をどのように把握することができますか(そして私はすべての暗黙の種類に興味があります)。私はIntelliJ Ideaを使用していますが、別のIDEで作業する必要がある場合でも、これを行う方法は探しています。 (私はREPLがそれを手伝ってくれるかどうか疑問に思っています)暗黙の呼び出しの連鎖の把握

たとえば、私はa gt bと書いています。gtscalazから来ます。そして、私が知りたい:

  1. Orderの暗黙のインスタンスを使用した
  2. 何型クラスを使用したまさに(私は、この特定のインスタンスでは答えを知っている - それはscalazではなく、一般的には簡単だ時にはそれが必ずしもその明らかに)
  3. 全チェーンhow aは方法gtを受けました。この特定の例では、ToOrderOps形質が使用されていたことは知っていますが、一般的にはわからないかもしれませんし、ToOrderOpsのインポート方法もわかりません。 REPLでScalaのリフレクションAPIを使用して
+0

@ stewの前の[回答](http://stackoverflow.com/a/34735993/409976)を見ると、おそらく[reify](https://gist.github.com/kevinmeredith/396cea7839fababa7e2a)が必要ですか? –

答えて

18

は通常、調査のこの種を開始するには良い方法です:

scala> import scala.reflect.runtime.universe.reify 
import scala.reflect.runtime.universe.reify 

scala> import scalaz._, Scalaz._ 
import scalaz._ 
import Scalaz._ 

scala> println(reify(1 gt 2)) 
Expr[Boolean](Scalaz.ToOrderOps(1)(Scalaz.intInstance).gt(2)) 

scala> println(reify("a" gt "b")) 
Expr[Boolean](Scalaz.ToOrderOps("a")(Scalaz.stringInstance).gt("b")) 

ここToOrderOpsは方法ではなく、形質である、とScalazは、あなたを示していますscalaz.ScalazToOrderOpsの形質の中に混ざっているので、このアプローチはあなたの3つのポイントすべてに対処すると思います。

+8

私はちょうどあなたがどれくらい素晴らしいことを言及したかった。ありがとう! :) – Archeg

関連する問題