Closed
Description
minimized code
trait Entity[M, T, P]
def (me: M) receive(sender: T)(msg: P)(given Entity[T, M, P]): Unit
def (me: M) name(): String
class GreetingPerson(private val name: String)
object GreetingPerson
given GreetingPersonEntity: Entity[GreetingPerson, GreetedPerson, String]
def (me: GreetingPerson) receive(sender: GreetedPerson)(msg: String)(given Entity[GreetedPerson, GreetingPerson, String]): Unit =
println(f"Thanks for saying $msg, ${sender.name()}")
def (me: GreetingPerson) name() =
me.name
class GreetedPerson(private val name: String)
object GreetedPerson
given GreetedPersonEntity: Entity[GreetedPerson, GreetingPerson, String]
def (me: GreetedPerson) receive(sender: GreetingPerson)(msg: String)(given Entity[GreetingPerson, GreetedPerson, String]): Unit =
println(f"Thanks for saying $msg, ${sender.name()}")
def (me: GreetedPerson) name() =
me.name
expectation
The code should compile but it doesn't unless val name
is renamed to something else.