Ultimamente ho letto da qualche parte che la corrispondenza del modello avviene durante l'esecuzione e non in fase di compilazione. (Sto cercando la fonte, ma non la trovo al momento.) È vero? E se sì, le guardie nelle funzioni hanno le stesse prestazioni?La corrispondenza del modello è più performante rispetto alle guardie?
Leggere questo è stato sorprendente per me perché ero solito pensare che GHC fosse in grado di ottimizzare alcune (probabilmente non tutte) le decisioni di corrispondenza dei pattern durante la compilazione. Questo succede mai?
Un caso per esempio:
f 1 = 3
f 2 = 4
vs
f' a | a == 1 = 3
| a == 2 = 4
fare f
e f'
compilare per lo stesso numero di istruzioni (per esempio in Core e/o inferiore)?
La situazione è diversa se I pattern corrisponde a un costruttore anziché a un valore? Per esempio. se GHC vede che una funzione da una posizione viene sempre invocata con un costruttore, ottimizza tale chiamata in modo tale da eliminare il controllo run-time? E se sì, puoi darmi un esempio che mostra cosa produce l'ottimizzazione?
In sintesi
ciò che è buono da sapere su questi due approcci in termini di prestazioni?
Quando è preferibile il rendimento?
Stai chiedendo come ottenere l'output principale da GHC o come utilizzare il criterio? – jberryman
Rilevante: [Haskell GHC: qual è la complessità temporale di un pattern che corrisponde a N costruttori?] (Http://stackoverflow.com/q/9027384/2751851) – duplode
Preferisco pensare che la corrispondenza dei pattern sia più veloce, considerando che le istanze di 'Eq' sono in genere basate sulla corrispondenza del modello in ogni caso. – AJFarmar