2017-04-24 8 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 패턴을 따르며, 이들은 정의 된 연산을 지원하는 여러 유형에 대해 여러 구현을하는 경향이 있습니다. 그 구현은 typeclass 인스턴스를 호출했다. Scala 표준 라이브러리 클래스의 Scalaz typeclass 인스턴스는 대부분 scalaz.std 패키지에 있습니다. 예 :

Bind[List] : listInstances scalach/std/List.scala에 정의 된 scalaz.std.ListInstaces 특성의 암시 적 값입니다. ListInstances 특성을 확장하는 scalaz.std.list 개체 (동일한 파일) 또는 scalaz.Scalaz 개체 (scalaz/Scalaz.scala)를 통해 가져올 수 있습니다.

Bind[Option] : optionInstances scalaz/std/Option.scala에 정의 된 sclaaz.std.OptionInstances의 암시 적 값입니다. scalaz.std.option 개체 (동일한 파일) 또는 scalaz.Scalaz 개체 (scalaz/Scalaz.scala)를 통해 가져올 수 있으며 두 개체 모두 OptionInstances 특성을 확장합니다.

하나 이상의 상응하는 특성을 구현하는 암시 적 값 또는 변환을 생성하여 자신의 유형에 대한 Scalaz typeclass 인스턴스를 만들 수도 있습니다. 눈에 보이려면 implicits를 컨텍스트로 가져와야합니다.