scala-common icon indicating copy to clipboard operation
scala-common copied to clipboard

AndTagged: illegal cyclic reference involving type @@

Open Ravenow opened this issue 4 years ago • 1 comments

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)]]
  }

Ravenow avatar Feb 08 '21 09:02 Ravenow

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.

adamw avatar Mar 19 '21 09:03 adamw