我得到相關類型的這種多參數的類型類實現一個奇怪的錯誤Scala的類型類有多個參數錯誤
trait Feedtype
trait Atom extends Feedtype
trait Rss2 extends Feedtype
case object Atom extends Atom
case object Rss2 extends Rss2
trait Encoding
trait Xml extends Encoding
trait Json
case object Json extends Json
case object Xml extends Xml
trait Content
case class show[T <: Feedtype,E <: Encoding](str: String, tp: T, en: E) extends Content
trait TypeClass[C,D,E] {
def show(c: C, d: D, e:E): String
}
trait Service{
def print[T,C,D](t: T,c:C, d:D)(implicit s: TypeClass[T,C,D]): String
}
object Service extends Service{
def print[T,C,D](t:T, c:C, d:D)(implicit s: TypeClass[T,C,D]): String =
s.show(t,c,d)
}
implicit val t1 = new TypeClass[show[Atom,Xml], Atom, Xml] {
def show(c: show[Atom,Xml], d:Atom, e:Xml) = c.str
}
implicit val t2 = new TypeClass[show[Rss2,Xml], Rss2, Xml] {
def show(c: show[Rss2,Xml], d:Rss2, e:Xml) = "hi there " + c.str
}
val s1 = show("some show", Atom, new Xml {})
Service.print(s1, s1.tp, s1.en)
我得到的錯誤是
type mismatch;
found : A$A10.this.typeclass[A$A10.this.show[A$A10.this.atom,A$A10.this.xml],A$A10.this.atom,A$A10.this.xml]
required: A$A10.this.typeclass[A$A10.this.show[A$A10.this.atom.type,A$A10.this.xml.type],A$A10.this.atom.type,A$A10.this.xml.type]
service.print(s1, s1.tp, s1.en)(t1);}
^
我是什麼在這裏失蹤?
更新
我想通了,問題是,和xml
是case objects
當它們被用作值創建s1
。如果我使用new atom {}
或new xml {}
,那麼執行正常。但是,我想知道爲什麼case object
被認爲是與它們所代表的類型不同的類型?
什麼是'atom'?請發佈你的問題[MCVE]。 –
錯過了代碼的一些部分,現在已經修復了。道歉和感謝 – kaychaks