i am trying to use encoders as a typeclass where if it fails to find an ExpressionEncoder it falls back to KryoEncoder.
the issue seems to be that ExpressionEncoder claims a little more than it can handle here: implicit def newProductEncoder[T <: Product : TypeTag]: Encoder[T] = Encoders.product[T] this "claims" to handle for example Option[Set[Int]], but it really cannot handle Set so it leads to a runtime exception. would it be useful to make this a little more specific? i guess the challenge is going to be case classes which unfortunately dont extend Product1, Product2, etc.