scala - Intellij IDEA 无法解析隐含符号(scala tagless final)
问题描述
我有一些使用无标记最终方法的代码,发现 Intellij IDEA 无法识别隐式类中的方法。
我这里有一些类型类(Functor
,Apply
等Applicative
),还有一个implicit class FunctorOps
带有一些辅助方法的Functor
. 此代码编译但 IDEA 找不到void
和implicit Applicative
. 查看错误:
无法解析符号 void:44
没有类型的隐式参数:Applicative[F_]:51
代码看起来不太难:
trait Functor[F[_]] {
def map[A, B](fa: F[A])(ab: A => B): F[B]
}
trait Semigroupal[F[_]] {
def product[A, B](fa: F[A], fb: F[B]): F[(A, B)]
}
trait Apply[F[_]] extends Semigroupal[F] with Functor[F] {
def map2[A, B, Result](fa: F[A], fb: F[B])(abr: (A, B) => Result): F[Result] =
map(product(fa, fb))(abr.tupled)
}
trait Applicative[F[_]] extends Apply[F] {
def pure[A](a: A): F[A]
}
object Implicits {
final implicit class FunctorOps[F[_]: Functor, A](private val fa: F[A]) {
@inline def map[B](ab: A => B): F[B] =
F.map(fa)(ab)
@inline def void: F[Unit] =
F.map(fa)(_ => ())
}
}
trait Random[F[_]] {
def nextInt(n: Int): F[Int]
def void: F[Unit]
}
object Random {
import Implicits.FunctorOps
def dsl[F[_]: Applicative]: Random[F] =
new Random[F] {
override def nextInt(n: Int): F[Int] = F.pure(scala.util.Random.nextInt(n))
override def void: F[Unit] = nextInt(4).void
}
}
object Foo {
def dsl[F[_]: Applicative]: F[Unit] =
Random.dsl.void
}
我的问题:有什么方法可以避免在 IDEA 中出现这个错误,或者最好将VS Code与Metals或其他东西一起使用?无标签final是否有更好的效果?
我使用 std lib 并在 sbt 中添加编译器插件以使用F
点方法语法:
addCompilerPlugin("org.augustjune" %% "context-applied" % "0.1.4")
截图:
我的环境:
Intellij IDEA版本2020.2.3(带有最后一个稳定的scala 插件)
操作系统:MacOS Catalina 10.15.7
解决方案
此行为在下一个稳定的Intellij IDEA版本2020.2.4中得到修复,并且可以正常工作。
推荐阅读
- mongodb - 502 Bad Gateway 使用 Atlas、Mongoose 和 Lambda
- sql-server - 使用 Case 语句时的语法错误(语句前有 Between)
- python-3.x - 用于管理终端应用程序进程的库
- reactjs - 即使在启用结算帐户后,我仍然在使用 google maps places api 时收到“状态:OVER_QUERY_LIMIT”
- c++ - For循环在cpp中只执行一次
- reactjs - 输入 '({ items }: PropsWithChildren
) => Element[]' 不可分配给类型 'FunctionComponent ' - java - 我的 JavaFX 应用程序上的 ClassCasting 错误和 tableView 上显示值的问题
- javascript - 内联 JS 在移动设备上产生 2 个新窗口
- javascript - 反应:在移动浏览器按钮 onClick hadler 触发多次。台式机没问题
- c# - 我对 sql 数据库及其视图逻辑有疑问?