В пустом новом проекте с этим build.sbt
:
scalaVersion := "2.12.8"
libraryDependencies ++= Seq(
"org.typelevel" %% "cats-tagless-macros" % "0.5",
"org.typelevel" %% "cats-tagless-legacy-macros" % "0.5"
)
addCompilerPlugin(
"org.scalameta" % "paradise" % "3.0.0-M11" cross CrossVersion.full
)
этот код:
import cats.tagless._
case class Element()
case class Id()
@finalAlg
@autoFunctorK(true)
trait MyService[F[_]] {
def put(element: Element): F[Element]
def get(elementId: Id): F[Element]
def all(): F[List[Element]]
def delete(elementId: Id): F[Unit]
}
компилируется просто отлично, как рекламируется здесь .
Если я удаляю addCompilerPlugin("org.scalameta" % "paradise" % "3.0.0-M11" cross CrossVersion.full)
, я получаю то же сообщение об ошибке:
макрос аннотации не может быть расширен (наиболее распространенная причина этого заключается в том, что вам нужно включить плагин macro paradise; другая возможность состоит в том, что вы пытаетесь использовать макрос аннотации в том же прогоне компиляции, который его определяет)
Опять же, это задокументировано, на связанной странице написано:
Аннотации макросов (@finalAlg, @autoFunctorK
, @autoInvariantK и т. Д.) По-прежнему зависят от скаламеты, поэтому необходимо добавить зависимости скаламеты в build.sbt.
Похоже, вам это нужно из-за @finalAlg
и @autoFunctorK
.
Обратите внимание, что я ничего не изменил в project/
.
EDIT
Если у вас есть несколько подпроектов, вы должны добавить плагин компилятора в подпроект, который действительно нуждается в нем. Обратите внимание, что
addCompilerPlugin(foobar)
по сути просто
libraryDependencies += compilerPlugin(foobar)
так что в вашем случае вы, вероятно, должны попробовать что-то вроде
libraryDependencies ++= Seq(
"org.typelevel" %% "cats-core" % "1.6.0",
"org.typelevel" %% "cats-effect" % "1.2.0",
"org.typelevel" %% "cats-tagless-macros" % "0.5",
"org.typelevel" %% "cats-tagless-legacy-macros" % "0.5",
"org.typelevel" %% "cats-mtl-core" % "0.5.0",
compilerPlugin(("org.scalameta" % "paradise" % "3.0.0-M11")
.cross(CrossVersion.full))
)
, а затем добавьте это в ваш подпроект algebra
.