Closed
Description
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]]