2014-11-09 2 views
1

스칼라 미래처럼 보이는 스 카스 모나드를 사용하는 몇 가지 질문을 봅니다. Herehere. 전역 실행 컨텍스트를 사용하지 않고 암시 적 유형 클래스로 이것을 해결하는 만족스러운 방법을 보지 못했지만 이러한 유형 클래스의 가져 오기에는 컨텍스트에 대한 정적 지식이 없어야합니다. 여기에 누락 된 것이 있습니까? (scalaz.concurrent.Future를 사용하지 않는다고 가정)스칼라 scalaz.Monad [scala.concurrent.Future], 실행 컨텍스트는 어떻습니까?

답변

1

는 모나드가 Future로 알려진 콜 사이트에서 암묵적으로 사용할 수 있어야합니다. 귀하의 프로그램에 존재하는 유형 클래스에 대해 잠재적으로 여러 다른 정의를 둘러싼 어색함이 있지만 거기에 정적으로 구현할 필요가 없다는 것에 동의합니다.

import scala.concurrent.Future 
import scalaz._ 
import Scalaz._ 

def foo[A, T[_]: Traverse, M[_]: Monad](t: T[M[A]]): M[T[A]] = 
    implicitly[Traverse[T]].sequence(t) 

def bar(l: List[Future[Int]])(implicit ctx: ExecutionContext): Future[List[Int]] = 
    foo(l) 
만`Applicative`이 foo``가 필요하며이 여기에 대신 형 제약 조건으로 사용함으로써해야

https://github.com/scalaz/scalaz/blob/v7.1.0/core/src/main/scala/scalaz/std/Future.scala#L8

+0

참고. 나는 질문을하기 때문에'Monad'만을 선택했습니다. – drstevens