A pure functional language shouldn't have the functions like "delay", "writeFile", etc. because they produce side effects. But Haskell has these functions and it deals with them by a container titled IO which is also a monad. IO hides all the side effects made by these functions.