Могу ли я написать функцию, выполняющую IO
в качестве побочного эффекта? Например:IO как побочный эффект
f :: Int -> Int
f n = putStr "text" >> return n*2
Очевидно, у меня нет какой-либо способ, чтобы написать этот код без его совершенно неправильно, но это должно по крайней мере показать примерно то, что я ищу делать.
Вы имеете в виду, что без результата типа 'IO Int'? – sepp2k
На самом деле это совершенно прекрасная функция - у нее просто есть тип Int -> IO Int', и это хорошо. Какая у вас проблема? – delnan
Запрет того, что вы хотите, - это * функция * монады IO. Вы можете обманывать 'unsafePerformIO', но он не будет делать то, что вы хотите здесь. Измените подпись на 'Int -> IO Int', и все будет в порядке. – gspr