Scala插件IntelliJ IDEA和更高种类的类型

时间:2019-03-24 08:50:31

标签: scala maven intellij-idea compilation

这是一个简单的代码:

  import cats.syntax.either._
  type FailFast[A] = Either[List[String], A]

  def f1:Either[Throwable, String] = Right("test")

  def f2:FailFast[String] =
    f1.bimap(t => List(t.getMessage), s => s)

  def f3:ReaderT[FailFast, Int, String] =
    ReaderT(ignored =>
      f1.bimap(t => List(t.getMessage), s => s)
    )

它已使用Maven成功编译:

  <plugin>
    <groupId>net.alchim31.maven</groupId>
    <artifactId>scala-maven-plugin</artifactId>
    <version>${scala-maven-plugin.version}</version>
    <executions>
      <execution>
        <id>compile</id>
        <phase>process-resources</phase>
        <goals>
          <goal>compile</goal>
        </goals>
        <configuration>
          <args>

            <!--https://tpolecat.github.io/2017/04/25/scalac-flags.html-->
            <arg>-Ypartial-unification</arg> <!--configure it also in IDE-->
            <!--I also highly recommend -Ywarn-value-discard especially once (if) you start using fully pure code with IO instead of Future-->
            <!--<arg>-Ywarn-value-discard</arg>-->
            <!--<arg>-Xprint:typer</arg>-->
            <arg>-encoding</arg>
            <arg>${project.build.sourceEncoding}</arg>
          </args>
        </configuration>
      </execution>
      <execution>
        <id>test-compile</id>
        <phase>process-test-resources</phase>
        <goals>
          <goal>testCompile</goal>
        </goals>
        <configuration>
          <args>
            <!--https://tpolecat.github.io/2017/04/25/scalac-flags.html-->
            <arg>-Ypartial-unification</arg> <!--configure it also in IDE-->
            <!--I also highly recommend -Ywarn-value-discard especially once (if) you start using fully pure code with IO instead of Future-->
            <!--<arg>-Ywarn-value-discard</arg>-->
            <!--<arg>-Xprint:typer</arg>-->
            <arg>-encoding</arg>
            <arg>${project.build.sourceEncoding}</arg>
          </args>
        </configuration>
      </execution>
    </executions>
    <configuration>
      <args>
        <arg>-encoding</arg>
        <arg>${project.build.sourceEncoding}</arg>
      </args>
      <displayCmd>true</displayCmd>
    </configuration>
  </plugin>

并且还可以使用IntelliJ IDEA中的Scala编译器很好地进行编译。 同时,功能f3被标记为红色,并带有警告: Warning

在同一IntelliJ IDEA中,还有另一个scala项目,该项目也是使用Maven构建的。在该项目中,这是一个编译错误。我现在开始:

  

错误:(129,5)没有方法的类型参数适用:(运行:A =>   存在对象Kleisli中的F [B])cats.data.Kleisli [F,A,B],以便它可以   应用于参数(SomeType => Either [List [String],Double])---   因为---参数表达式的类型与形式不兼容   参数类型;找到:s =>需要[List [String],Double]:   ?A =>?F [?B]       ReaderT(s =>

我已经很可能遇到相同的错误,并且通过应用-Ypartial-unification选项已将其修复。但现在它无济于事。非常奇怪的行为。

如何在第一个示例中消除警告?又如何再次重置-Ypartial-unification选项?

此外,这是IDE中的Scala编译器配置: Scala Compiler configuration

编辑: 创建了一个问题[https://youtrack.jetbrains.com/issue/SCL-15159]

解决了编译问题。当您打开Scala编译器时,默认情况下会选择一个“默认”项目。不知道那是什么看来这是一个由IntelliJ IDEA本身创建的项目,在我看来,这只是maven项目的包装。因此,如果您手动选择项目(在我的情况下,该项目在“ Maven 1”下列出),您将看到Scala编译器选项不是从“默认”继承的。一旦设置Ypartial-unification,它就会被编译。只有警告仍然存在。

0 个答案:

没有答案