Чтобы выполнять одно действие ввода-вывода за другим, используйте блок do
(или какой-нибудь оператор монади c, например >>
и >>=
). Например,
doLogMap :: Double -> [Double] -> IO ()
doLogMap rate pops = do
let prev = last pops
newpops = pops ++ [logMap rate prev]
print newpops
doLogMap rate newpops
Обратите внимание, что это будет l oop навсегда. Это также не очень эффективно, но если ваш список pops
короткий, он не будет сильно бормотать.