我有以下特点:
trait Test[F[_]]{
def foo: F[Int]
}
我尝试将所谓的批处理转换应用于它,如下所示:
def withBatching[F[_]](t: Test[F], nat: F ~> F[List[*]]): Test[F[List[*]]] = ???
问题是它没有编译以下错误:
[error] /Hello.scala:15:66: F[[α$1$]List[α$1$]] takes no type parameters, expected: 1
[error] def withBatching[F[_]](t: Test[F], nat: F ~> F[List[*]]): Test[F[List[*]]] = ???
[error] ^
[error] /Hello.scala:15:48: F[[α$0$]List[α$0$]] takes no type parameters, expected: 1
[error] def withBatching[F[_]](t: Test[F], nat: F ~> F[List[*]]): Test[F[List[*]]] = ???
有没有一种方法可以用类投影仪声明像F[List[*]]
这样的符号?
UPD:我找到了一些类型别名type ListT[F[_], A] = F[List[A]]
的解决方法,这似乎有效,但有更自然的方法吗?
*
总是在最严格的级别绑定,这不是nat
和返回类型所需要的。您应该使用种类投影仪提供的Lambda
语法来明确选择级别:
def withBatching[F[_]](
t: Test[F], nat: F ~> Lambda[A => F[List[A]]]
): Test[Lambda[A => F[List[A]]]] = ???