Sto imparando Haskell lavorando attraverso lo Haskell course by Brent Yorgey. Ho appena raggiunto la sezione Monade, e mentre penso di avere (finalmente) una conoscenza decente su come lavorare con le monadi, non capisco come testare il codice che le usa.Test del codice monadico
L'esercizio di questa sezione è di scrivere una simulazione di rischio (semplificata) e richiede un uso intensivo della monade Rand StdGen
. In particolare, dobbiamo scrivere la seguente funzione:
type Army = Int
data Battlefield = Battlefield { attackers :: Army, defenders :: Army }
battle :: Battlefield -> Rand StdGen Battlefield
Ci vuole una battaglia iniziale, e viene eseguito una simulazione di come questa battaglia sarebbe andata.
Ho un'implementazione per questo, ma non capisco come testarlo. Non riesco a "capire" i valori all'interno dello restituito da, quindi non posso stamparli nell'interprete GHCI, che è il modo in cui ho testato il mio codice finora. Inoltre non riesco a capire come stampare il risultato di una battaglia in una funzione principale di Haskell, o qualcosa del genere. Come fanno le persone a testare questo tipo di funzioni?
È possibile "ottenere" il risultato di un calcolo casuale utilizzando funzioni come ['evalRand'] (http://hackage.haskell.org/package/MonadRandom-0.1.3/docs/Control-Monad-Random. html) e amici. 'evalRand' prende un 'avvio'' RandomGen' e esegue il calcolo monadico in modo deterministico. –
Fantastico, grazie! Se lo pubblichi come risposta, lo accetterò. – anjruu