scala-common
scala-common copied to clipboard
AndTagged: illegal cyclic reference involving type @@
i have issue with following code
import cats.syntax.option._
import com.softwaremill.tagging._
object Sample extends App {
trait ContentTypeTag
type ContentType = String @@ ContentTypeTag
trait ServiceContentTypeTag
type ServiceContentType = String @@ ServiceContentTypeTag
def method(ct: Option[ContentType]): Unit = ct match {
case Some(v) => println(s"Content Type: $v")
case None => println(s"Content Type: <UNKNOWN>")
}
def svcMethod(ct: Option[ServiceContentType]): Unit = method(ct.map(_.andTaggedWith[ContentTypeTag]))
svcMethod("application/json".taggedWith[ServiceContentTypeTag].some)
}
Error has gone with following AndTagger:
implicit class AndTagger[T, U](val t: T @@ U) extends AnyVal {
def andTaggedWith[V]: T with Tag[(U with V)] = t.asInstanceOf[T with Tag[(U with V)]]
}
Hm true, but then the inferred type has the ... with Tag
format, not the @@
format. Not sure how to fix it while retaining the @@
notation.