Non ho mai usato PureScript, ma la risposta breve è sì, le etichette effetto sono utili per la modellazione di effetti in modo basato su principi.
Non sono sicuro di quale sia il tuo background, quindi non so a quale livello rispondere alla domanda. Conoscete gli effetti collaterali, i lati negativi del loro uso illimitato, la programmazione funzionale e perché cerchiamo di evitare gli effetti collaterali in FP? Se è così, ciò fornisce una buona motivazione per i sistemi di effetti, che consentono di utilizzare effetti senza consentire il loro uso illimitato; in linguaggi tipizzati staticamente, è persino possibile tracciare esplicitamente gli effetti nel sistema di tipi. Un sistema di effetti popolare è i trasformatori monad (ovviamente sono non senza inconvenienti - ma hanno già implementati nelle lingue popolari e sono quindi facili da iniziare a sperimentare con).
Se capisci tutto questo, allora forse la tua domanda è semplicemente perché uno / vorrebbe più istanze separate dello stesso effetto? I generatori di numeri pseudo-casuali non generano numeri casuali e le relazioni tra i numeri generati non sono casuali - quindi con due (o più) effetti casuali separati, puoi essenzialmente avere due (o più) numeri pseudo-casuali non correlati ruscelli.
Dichiarazione di non responsabilità: non ho mai usato PureScript - questa è solo la mia opinione!
Perché uno / desidera più istanze separate dello stesso effetto? I generatori di numeri pseudo-casuali non generano numeri casuali e le relazioni tra i numeri generati non sono casuali - quindi con due (o più) effetti casuali separati, puoi essenzialmente avere due (o più) numeri pseudo-casuali non correlati ruscelli.
Un altro vantaggio dell'uso dei nomi - anche quando non c'è più di una singola istanza di un dato effetto - è che qualche significato semantico può essere associato agli effetti attraverso un'etichetta significativa. In altre parole, non tutti i State
s sono creati uguali!
Un altro esempio di utilizzo di più istanze dello stesso effetto, controlla i combinatori di parser. Questi sono facili da costruire da sistemi di effetti come i trasformatori monad. Un semplice backtracking, un parser per la segnalazione degli errori potrebbe essere creato da:
- Stato: gestisce la stringa di input
- Errore - segnalazione degli errori
- Forse - backtracking
effetti (mi dispiace, questa è la terminologia Haskell - Non so come quella mappa sugli effetti di PureScript). Se si desidera monitorare anche la posizione (riga, colonna) durante l'analisi, è possibile aggiungere un secondo effetto stato. Puoi anche tenere traccia delle dichiarazioni delle variabili globali usando un effetto di terzo stato (supponendo che tu stia analizzando un linguaggio di programmazione). Mentre in linea di principio si potevano combinare tutti e tre gli effetti di stato in uno solo, ciò avrebbe introdotto l'accoppiamento e sarebbe stato meno estendibile; averli separati evita questo accoppiamento.