Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala:具有普遍特征的不成形通用型_Scala_Traits_Shapeless - Fatal编程技术网

Scala:具有普遍特征的不成形通用型

Scala:具有普遍特征的不成形通用型,scala,traits,shapeless,Scala,Traits,Shapeless,我试图为一个带有标记特征的案例类找到一个不成形的泛型,如下所示: case class X(a:String) trait UniversalTrait extends Any {} object MyApp extends App { val ok = Generic[X] val notOk = Generic[X with UniversalTrait] } 它没有编译,错误是在notOk行中找不到参数gen:shapeless.Generic[X with Universa

我试图为一个带有标记特征的案例类找到一个不成形的泛型,如下所示:

case class X(a:String)

trait UniversalTrait extends Any {}

object MyApp extends App {
  val ok = Generic[X]
  val notOk = Generic[X with UniversalTrait]
}
它没有编译,错误是
notOk
行中找不到参数gen:shapeless.Generic[X with UniversalTrait]
的隐式值。为什么呢?有什么办法吗

旁注:我认为这可能与
from
无法将标记特征添加到返回的实例有关,因此我尝试通过添加以下内容来解决问题:

object UniversalTrait {
  implicit def genGeneric[P1<:Product with UniversalTrait,P2<:Product,L<:HList]
                 (implicit constraint: P1 =:= P2 with UniversalTrait,
                           underlying: Generic.Aux[P2,L]): Generic.Aux[P1,L] = new Generic[P1]{
        type Repr=L
        def to(t: P1): Repr = underlying.to(t)
        def from(r: Repr): P1 = underlying.from(r).asInstanceOf[P1]
  }
}
对象通用属性{
隐式定义gengengeneric[P1派生仅适用于。
这是一个(密封的)特征和扩展该特征的case类(对象)

case class X(a:String) extends UniversalTrait

sealed trait UniversalTrait extends Any {}

val ok = Generic[X]

谢谢。我仍然不明白为什么我尝试的修复没有起作用?@holbech它没有起作用,因为
X with UniversalTrait
不是代数数据类型(尽管它等于代数数据类型,
隐式地[X with UniversalTrait=:=X]
case class X(a:String)扩展UniversalTrait
时)。宏根本不需要这种类型。@holbech如果将
scalacOptions+=“-Xlog implicits”
添加到build.sbt,则会看到:
信息:(35,6)shapess.this.Generic.materialize不是shapess.Generic.Aux[App8.this.X和App8.this.UniversalTrait,String::shapess.HNil]的有效隐式值因为:hasMatchingSymbol报告的错误:App8.this.X与App8.this.UniversalTrait不是一个case类,类似case类,是一个密封的特征或单元[Generic.Aux[X与UniversalTrait,String::HNil]