Dire que j'ai ceci:Contraindre une classe avec des preuves implicites
trait Animal {
type Species
}
Je peux assez facilement écrire une fonction qui ne prend que deux animaux de la même espèce
def breed(a: Animal, b: Animal)(implicit evidence: a.Species =:= b.Species) = ???
mais je veux créer un class avec le même type de contrainte:
class Bed(a: Animal, b: Animal)(implicit evidence: a.Species =:= b.Species)
mais il ne sera pas compilé. J'ai essayé quelques combinaisons d'essayer d'utiliser des caractères avec des identificateurs stables et les contraintes et ce pas, mais peu importe ce que je fais - je semble toujours se retrouver avec des problèmes
trait Bed {
type T
def a: Animal { type Species = T }
def b: Animal { type Species = T }
}
object Bed {
def apply(a1: Animal, b1: Animal)(implicit ev: a1.Species =:= b1.Species) = new Bed {
type T = b1.Species
def a = a1 // this line won't compile, as the compiler can't see the two species are equal ?
def b = b1
}
}
Merci.