Scalaz Bind.bind在哪里实施?

时间:2017-04-24 16:48:39

标签: scalaz7

我很好奇方法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来源。

1 个答案:

答案 0 :(得分:0)

Bind遵循类型类模式,并且这些模式往往具有支持其定义的操作的不同类型的多个实现。这些实现称为类型类实例。 Scala标准库类的大多数Scalaz类型类实例都驻留在scalaz.std包中。例子:

Bind[List]listInstances scalaz.std.ListInstaces特征中的隐含值,在scalaz / std / List.scala中定义。它可以通过scalaz.std.list对象(在同一个文件中)或scalaz.Scalaz对象(在scalaz / Scalaz.scala中)导入,这两个对象都扩展了ListInstances特征。

Bind[Option]optionInstances sclaaz.std.OptionInstances中的隐含值,在scalaz / std / Option.scala中定义。它可以通过scalaz.std.option对象(在同一个文件中)或scalaz.Scalaz对象(在scalaz / Scalaz.scala中)导入,这两个对象都扩展了OptionInstances特征。

您还可以通过创建实现一个或多个相应特征的隐式值或转换来为您自己的类型创建Scalaz类型类实例。要显示,必须将implicits导入您的上下文。