АГ
Но чем тебя пример с шахматами не устраивает?
findBestMove 0 piece = pure (Left (SearchExausted piece))
findBestMove deep piece = do
move <- selectNextMove piece
value <- evaluateMove piece move
if (isGoodEnough move value)
then pure (Right (piece, move, value))
else
findBestMove (deep - 1) piece
doMove = do
pieces <- getAvailablePieces
eMoves <- mapM (findBestMove 10) pieces
let failedPieces = lefts eMoves
mapM_ showFailedPiece failedPieces
where
showFailedPiece (Left (SearchExausted piece)) = ...
showFailedPiece (Left (ValueIsLow piece)) = ...