Scalaz offre una bella astrazione su calcoli statali: la monade ST.Quando usare la monade ST in Scala?
La monade ST consente di acquisire un calcolo di effetti collaterali in una forma funzionale.
In Haskell, suppongo, l'utilizzo di tale monade è l'unico modo per implementare in modo efficiente alcuni algoritmi imperativi.
Ma in Scala posso semplicemente usare strutture dati mutabili se necessario.
Quello che ho scoperto è che l'utilizzo di concetti funzionali di Scalaz comporta un sovraccarico computazionale. Vedi ad esempio this question. Quindi non sembra ragionevole passare da un'implementazione funzionale a un'implementazione funzionale usando la monade ST, se l'obiettivo desiderato è un aumento di efficienza.
Quello che sto chiedendo è quindi:
- Quando è ragionevole usare la monade ST?
- In quali situazioni l'hai usato e sembrava essere una buona scelta?
"In Haskell, suppongo, l'utilizzo di tale monade è l'unico modo per implementare in modo efficiente alcuni algoritmi imperativi." - Non è corretto. La monade di stato è una monade semplice, puramente funzionale, ma per il supporto hardware nativo per gli effetti di memoria si usa la monade ST. Per effetti collaterali arbitrari, la monade IO. Forse stai cercando la monade della ST in Scala? –
@DonStewart Hai ragione. Ho sempre trovato confuso il nome. – ziggystar