Hello,
Here is what I can come with (I'm just a dilettantish scalaist) :
trait Topic[+M] { type Message = M; def message: Message}
trait SubTopic[M, S <: Topic[M]#Message] extends Topic[S]
class HistMessage { val value = " A History Message " }
class XXCentMessage extends HistMessage { override val value = " A
XXCent Message " }
class DummyMessage { val value = " A DUMMY Message " }
class History extends Topic[HistMessage] { def message = new HistMessage }
class XXCentury extends History with SubTopic[HistMessage,
XXCentMessage] { override def message = new XXCentMessage}
--
scala> val hist = new History
scala> hist.message.value
res3: java.lang.String = " A History Message "
--
scala> val xx = new XXCentury
scala> xx.message.value
res4: java.lang.String = " A XXCent Message "
--
scala> class XXCentury extends History with SubTopic[DummyMessage,
XXCentMessage] { override def message = new XXCentMessage}
<console>:13: error: type arguments [DummyMessage,XXCentMessage] do
not conform to trait SubTopic's type parameter bounds [M,S <: M]
class XXCentury extends History with SubTopic[DummyMessage,
XXCentMessage] { override def message = new XXCentMessage}
--
scala> class XXCentury extends History with SubTopic[HistMessage,
DummyMessage] { override def message = new XXCentMessage}
<console>:13: error: illegal inheritance;
class XXCentury inherits different type instances of trait Topic:
Topic[DummyMessage] and Topic[HistMessage]
class XXCentury extends History with SubTopic[HistMessage,
DummyMessage] { override def message = new XXCentMessage}
^
<console>:13: error: overriding method message in trait Topic of type
=> XXCentury.this.Message;
method message has incompatible type
class XXCentury extends History with SubTopic[HistMessage,
DummyMessage] { override def message = new XXCentMessage}
^
<console>:13: error: type arguments [HistMessage,DummyMessage] do not
conform to trait SubTopic's type parameter bounds [M,S <: M]
class XXCentury extends History with SubTopic[HistMessage,
DummyMessage] { override def message = new XXCentMessage}
^
--
scala> class XXCentury extends History with SubTopic[HistMessage,
DummyMessage] { override def message = new DummyMessage}
<console>:12: error: type mismatch;
found : DummyMessage
required: HistMessage
class XXCentury extends History with SubTopic[HistMessage,
DummyMessage] { override def message = new DummyMessage}
--
Hope this helps,
G.N
--
Grégoire Neuville
--
Grégoire Neuville