do コンストラクト内であっても、IO が順番に実行されないという問題が発生しました。
次のコードでは、どのカードが残っているかを追跡しています。カードは文字のタプル (1 つはスーツ用、もう 1 つはバリュー用) であり、ユーザーはどのカードがプレイされたかを継続的に尋ねられます。putStr
現在のように最後ではなく、各入力間で を実行したい。
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