我定义了两个对象:
data class ParserK
注释@higherkind
interface ParserKFunctor
注释@extension
这是代码:
@higherkind
data class ParserK<A>(val f: (String) -> Option<A>): ParserKOf<A> {
companion object
}
@extension
interface ParserKFunctor : Functor<ForParserK> {
override fun <A, B> Kind<ForParserK, A>.map(f: (A) -> B): Kind<ForParserK, B> {
...
}
}
当我执行时,./gradlew :app:kaptKotlin
我得到:
error: "Arrow's annotations can only be used on Kotlin classes". Not valid for error.NonExistentClass
> Task :app:kaptGenerateStubsKotlin
> Task :app:kaptKotlin FAILED
e: error: Arrow's annotations can only be used on Kotlin classes. Not valid for error.NonExistentClass
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:kaptKotlin'.
> Compilation error. See log for more details
这是我发现的:
- 如果我删除函子定义,则目标成功完成,我可以看到生成的代码。
- 如果我
@higherkind
从数据类中删除ParserK
并将生成的源复制到ParserK
定义的同一文件中,那么我可以看到生成的仿函数代码。
对我来说似乎是一个错误,如果我错了,请纠正我
更新: