Приятно знать (по крайней мере, в Safe Haskell) из подписи, действительно ли что-то выполняет операции ввода-вывода, но IO включает в себя множество разных вещей - putStr
, доступ к базе данных, удаление и запись в файлы, IORefs, и т.д.
Если я использую сигнатуры типа в качестве меры безопасности при запуске произвольного кода, может быть, я готов принять некоторые действия IO - putStr
и, например, ilk, но не другие.
Есть ли способ определить ограниченную версию монады ввода-вывода с только подмножеством нормальных действий IO? Если да, то пример (с putStr
, например) был бы очень желанным!