2017-04-24 53 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遵循类型类型模式,而那些支持由它们定义的操作的不同类型往往有多个实现。该实现称为类型类实例。 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导入到您的上下文中。