Ho riscontrato un problema con I/O non in esecuzione in ordine, anche all'interno di un costrutto do.Perché il mio IO non viene eseguito in ordine?
Nel seguente codice mi limito a tenere traccia di quali carte sono rimaste, dove la carta è una tupla di caratteri (una per seme e una per valore) quindi all'utente viene chiesto continuamente quali carte sono state giocate. Voglio che il putStr
sia eseguito tra ogni input e non alla fine come ora.
module Main where
main = doLoop cards
doLoop xs = do putStr $ show xs
s <- getChar
n <- getChar
doLoop $ remove (s,n) xs
suits = "SCDH"
vals = "A23456789JQK"
cards = [(s,n) | s <- suits, n <- vals]
type Card = (Char,Char)
remove :: Card -> [Card] -> [Card]
remove card xs = filter (/= card) xs
Codice errato! Qui si presenta un errore di corrispondenza del modello potenzioso. –
È vero, il caso è tutt'altro che esaustivo, ma come prova del concetto (per quanto riguarda le operazioni di IO) fa il lavoro. – perimosocordiae