在scala shell上推断泛型类型

时间:2013-06-07 16:59:37

标签: scala type-inference interactive-shell

是否可以使用scala shell推断泛型函数的类型?

我试图找到函数Future.traverse(scala 2.10)的类型。完整的通用类型是

def traverse[A, B, M[_] <: TraversableOnce[_]](in: M[A])(fn: A => scala.concurrent.Future[B])(implicit cbf: generic.CanBuildFrom[M[A],B,M[B]], executor: ExecutionContext): Future[M[B]]   

这对我来说几乎是不可读的,所以我认为尝试它是一些更具体的类型是个好主意。所以我试过了:

> :t (x : List[_]) => (Future traverse x) _
List[_] => ((Any => scala.concurrent.Future[Nothing]) => scala.concurrent.Future[List[Nothing]])

这有很多帮助,但如果我可以在List类型构造函数中指定类型会更好:

  

:t(x:List [a])=&gt; (未来遍历x)_

不幸的是(并且可理解地)给了我一个type a not found错误。

有没有办法让这项工作?

1 个答案:

答案 0 :(得分:1)

也许

scala> object Foo {
     | type A = Int
     | type B = Int
     | }
defined object Foo

scala> import Foo._
import Foo._

scala> :type  Future.traverse[A,B,List] _
List[Foo.A] => ((Foo.A => scala.concurrent.Future[Foo.B]) => scala.concurrent.Future[List[Foo.B]])