Delimitando la mónada IO

Es bueno saber (en Safe Haskell, al menos) de la firma si algo realiza o no acciones de IO, pero IO abarca muchas cosas diferentes:putStr, acceso a bases de datos, eliminación y escritura de archivos, IORefs, etc.

Si estoy usando las firmas de tipo como una medida de seguridad cuando ejecuto un código arbitrario, podría ser que esté dispuesto a aceptar algunas acciones de IO.putStr y los ilk, por ejemplo, pero no otros.

¿Hay alguna forma de definir una versión restringida de la mónada IO, con solo un subconjunto de las acciones IO normales? Si es así, un ejemplo (conputStr, por ejemplo) sería muy bienvenido!

Respuestas a la pregunta(2)

Su respuesta a la pregunta