## minimized code ```Scala 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.