我很好奇方法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源代碼。
我很好奇方法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源代碼。
Bind
遵循類型類型模式,而那些支持由它們定義的操作的不同類型往往有多個實現。該實現稱爲類型類實例。 Scala標準庫類的大部分Scalaz類實例都位於scalaz.std
包中。示例:
Bind[List]
:listInstances
隱含值scalaz.std.ListInstaces
特徵,在scalaz/std/List.scala中定義。它可以通過scalaz.std.list
對象(在同一文件中)或scalaz.Scalaz
對象(在斯卡拉/ Scalaz.scala中)導入,兩者都可以擴展ListInstances
特徵。
Bind[Option]
:optionInstances
暗示值sclaaz.std.OptionInstances
,在scalaz/std/Option.scala中定義。它可以通過scalaz.std.option
對象(在同一文件中)或scalaz.Scalaz
對象(在斯卡拉/ Scalaz.scala中)導入,兩者都可以擴展OptionInstances
特徵。
您還可以通過創建實現一個或多個相應特徵的隱式值或轉換來爲您自己的類型創建Scalaz類型實例。要顯示,必須將implicits導入到您的上下文中。