Skip to content

implicit object on a companion is not found in implicit scope #10411

Closed
@fommil

Description

@fommil

for any simple typeclass

@typeclass trait UrlEncoded[T] {
  def urlEncoded(t: T): String
}

if the impl is on the companion of an ADT, everything works fine

  final case class AccessRequest(
    code: String,
    redirect_uri: Uri,
    client_id: String,
    client_secret: String,
    scope: String = "",
    grant_type: String = "authorization_code"
  )

  object AccessRequest {
    import java.net.URLDecoder
    import http.encoding._
    import UrlEncoded.ops._
    implicit val UrlEncoder: UrlEncoded[AccessRequest] =
      new UrlEncoded[AccessRequest] {
        def urlEncoded(a: AccessRequest): String =
          Seq(
            "code"          -> a.code.urlEncoded,
            "redirect_uri"  -> a.redirect_uri.urlEncoded,
            "client_id"     -> a.client_id.urlEncoded,
            "client_secret" -> a.client_secret.urlEncoded,
            "scope"         -> a.scope.urlEncoded,
            "grant_type"    -> a.grant_type
          ).urlEncoded
      }
  }

but if implicit val UrlEncoder is rewritten as an implicit object

    implicit object UrlEncoder extends UrlEncoded[AccessRequest] {

compilation fails when trying to implicitly[UrlEncoded[AccessRequest]]

from https://github.com/fommil/drone-dynamic-agents/blob/6f3a629a9ab7fb801cfc1dcdd9b41fa4de10056e/src/main/scala/http/oauth2.scala#L281-L330

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions