Se uso un un sealed trait
o abstract class
in Scala e poi uso la corrispondenza dei pattern, mi chiedo, il compilatore non sa al momento della compilazione per questo particolare patternmatch quali possibili implementazioni di questo tratto / classe sono disponibili? Quindi, se lo fa, potrebbe non dare gli avvisi di corrispondenza del modello anche se il trait
/ abstract class
non è sigillato perché sa quali tipi potrebbero essere usati, controllando tutte le possibili dipendenze / le importazioni?
es. se ho un Option[A]
e faccio lo schema di corrispondenza solo per Some[A]
ma non per None
, il compilatore si lamenterà, perché Option
è sigillato.
Se il compilatore non può sapere / risolvere ciò, allora perché non può? E se il compilatore (teoricamente) può farlo, quali sono le ragioni per cui non è usato in Scala? Esistono altri linguaggi che supportano questo tipo di comportamento?