Я только немного поиграл с Yampa, пытаясь проработать документы FRP, но, насколько я понимаю, это совсем не то, как вы работаете с IO
в Yampa. Вместо этого вы «анимируете» SF a b
с помощью функции reactimate
, которая принимает функцию типа b -> IO ()
в качестве второго аргумента. Эта функция - то, где будут жить такие вещи, как ваш putStrLn
, наряду с любыми другими видами рендеринга, которые делает программа.
Раздел «Функции анимации сигнала» «Yampa Arcade» дает хорошее объяснение того, как работает reactimate
.