¿Es la mónada IO técnicamente incorrecta?

En el wiki de haskell hay el siguiente ejemplo de uso condicional de la mónada IO (ver aquí) . when :: Bool -> IO () -> IO () when condition action world = if condition then action world else ((), world) Tenga en cuenta que en este ejemplo, la definición de IO ase toma RealWorld ->...