Объединение монад в Haskell

Я пытаюсь написать пасьянс "Паук" в качестве обучающего упражнения на Haskell.

Моя функция mainбудет вызывать функцию playGameодин раз для каждой игры (используя mapM), передавая номер игры и генератор случайных чисел ( StdGen). Функция playGameдолжна возвращать монаду Control.Monad.Stateи монаду IO, содержащую String, показывающую игровую таблицу, и Bool. ] указывает, была ли игра выиграна или проиграна.

Как объединить монаду Stateс монадой IOдля возвращаемого значения? Каким должно быть объявление типа для `playGame?

playGame :: Int -> StdGen a -> State IO (String, Bool)

Правильно ли State IO (String, Bool)? Если нет, то каким он должен быть?

В mainя планирую использовать

do
  -- get the number of games from the command line (already written)
  results <- mapM (\game -> playGame game getStdGen) [1..numberOfGames]

Это правильный способ вызова playGame?

10
задан Ralph 6 June 2012 в 12:02
поделиться