Имеется такая ситуация. Пишем прогу на хаскеле, по всем функциональным канонам стараясь максимально выносить код в чистые функции. В один прекрасный момент становится ясно, что некоей функции f очень нужны внешние данные (из файла, сети и т.д.). Как правильно поступить?
1. Заюзать unsafePerformIO - быстро, просто, но не кошерно.
2. Добавить еще один аргумент, те самые внешние данные, получить которые теперь задача вызывающего.
3. Завернуть функцию в IO и переделать вызов в монадический.
4. Есть еще варианты?