2017-04-24 6 views
1

方法scalaz.Bind.bindが実装されている場所が不思議ですか?ありがとうScalaz Bind.bindはどこに実装されていますか?

trait Bind[F[_]] extends Apply[F] { self => 
    //// 

    /** Equivalent to `join(map(fa)(f))`. */ 
    def bind[A, B](fa: F[A])(f: A => F[B]): F[B] 
    ... 

私は7.3.0-SNAPSHOTソースを見ています。

答えて

0

Bindは、型定義パターンに従います。これらは、型定義された操作をサポートするさまざまな型に対して複数の実装を持つ傾向があります。その実装はtypeclassインスタンスと呼ばれていました。 Scala標準ライブラリクラスのScalaz typeclassインスタンスのほとんどは、scalaz.stdパッケージにあります。例:

Bind[List]listInstances scalach/std/List.scalaで定義されている暗黙的な値はscalaz.std.ListInstacesです。これはscalaz.std.listオブジェクト(同じファイル内)またはscalaz.Scalazオブジェクト(scalaz/Scalaz.scala)を介してインポートすることができ、どちらもListInstances特性を拡張します。

Bind[Option]optionInstancessclaaz.std.OptionInstancesの暗黙の値は、scalaz/std/Option.scalaで定義されています。これはscalaz.std.optionオブジェクト(同じファイル内)またはscalaz.Scalazオブジェクト(scalaz/Scalaz.scala)を介してインポートすることができ、いずれもOptionInstances特性を拡張します。

また、1つ以上の対応する特性を実装する暗黙的な値または変換を作成することによって、独自のタイプのScalaz型クラスインスタンスを作成することもできます。目に見えるようにするには、あなたの文脈にimplicitsをインポートする必要があります。

関連する問題