声明自然转换以使用种类投影仪进行批处理



我有以下特点:

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]]]] = ???

相关内容

  • 没有找到相关文章

最新更新