Это забавное введение в функциональное мышление об императивных действиях. Один из способов думать об этом состоит в том, что вы хотите создать список действий :
let actions = [ print (nextNum 0), print (nextNum 1), ... ]
Это ничего не значит , делает , но просто дает перечислите имя actions
. Мы используем функцию sequence_
(обратите внимание на подчеркивание), чтобы фактически выполнить действия:
sequence_ actions
Вы можете составить свой список действий с пониманием списка:
main = do
let actions = [ print (nextNum n) | n <- [0..4] ]
sequence_ actions
И из Конечно, вы можете «встроить» переменную actions
:
main = sequence_ [ print (nextNum n) | n <- [0..4] ]
Подчеркивание после sequence_
состоит в том, чтобы отличать его от sequence
, который собирает возвращаемое значение каждого действия и возвращает их все в виде список. sequence_
просто игнорирует возвращаемое значение.