Я изучаю Haskell, работая через курс Haskell от Brent Yorgey. Я просто добрался до секции монады, и, хотя я думаю, что (наконец) по-настоящему понимаю, как работать с монадами, я не понимаю, как тестировать код, который их использует.
Упражнение для этого раздела состоит в том, чтобы написать (упрощенное) моделирование рисков, и это требует интенсивного использования монады Rand StdGen
. В частности, мы должны написать следующую функцию:
type Army = Int
data Battlefield = Battlefield { attackers :: Army, defenders :: Army }
battle :: Battlefield -> Rand StdGen Battlefield
Он берет начальное поле битвы и запускает симуляцию того, как будет проходить эта битва.
У меня есть реализация для него, но я не понимаю, как ее протестировать. Я не могу "получить" значения внутри Rand StdGen Battlefield
, возвращенные battle
, поэтому я не могу их распечатать в интерпретаторе GHCI, так как до сих пор я тестировал свой код. Я также не могу понять, как напечатать результат битвы в главной функции Haskell или что-то в этом роде. Как люди проходят тестирование таких функций?