2016-06-06 18 views
24

Qual è la relazione tra i tipi di Purescript Eff e Aff? È possibile convertire tra di loro?Cosa sono Eff e Aff?

Sono appena agli inizi con Purescript proveniente da Haskell e sembra che entrambi i tipi svolgano il ruolo che ha lo IO in Haskell. È giusto dirlo?

risposta

31

Eff è un effetto sincrono. Viene utilizzato per la sequenza di codice JavaScript straniero efficace, ad esempio la generazione casuale di numeri, la lettura e la scrittura di valori mutabili, la scrittura sulla console e le eccezioni di lancio e cattura.

Aff è un effetto monodisco asincrono. Può gestire e sequenziare codice asincrono efficace, come richieste AJAX, timeout e rete e file IO. Può anche eseguire effetti sincroni usando liftEff. E fornisce anche un buon meccanismo per la gestione degli errori.

È possibile convertire da Eff a Aff utilizzando liftEff (tutto ciò che non pausa è un esempio di qualcosa che viene lasciato pausa), ma nella direzione opposta non è possibile in generale. Le azioni Aff possono essere eseguite in un contesto Eff fornendo un callback.

IO Haskell è simile a entrambi, ma più vicino a Aff rispetto Eff in quanto IO azioni possono rappresentare le cose asincroni (vedi threadDelay per esempio).

+1

Penso che valga la pena citare 'launchAff' che può essere usato per eseguire un calcolo' Aff' in modo sincrono, se necessario. È definito in 'Control.Monad.Aff'. L'inseguimento avrà una descrizione migliore di ciò che fa e di come funziona, rispetto a quello che posso inserire in un commento. –