# Bryan O'Sullivan et al. - Real World Haskell Chapter 7. IO (Highlights) ![rw-book-cover|256](https://readwise-assets.s3.amazonaws.com/static/images/article3.5c705a01b476.png) ## Metadata **Review**:: [readwise.io](https://readwise.io/bookreview/58004735) **Source**:: #from/readwise #from/reader **Zettel**:: #zettel/fleeting **Status**:: #x **Authors**:: [[Bryan O'Sullivan]], [[Don Stewart]], [[John Goerzen]] **Full Title**:: Real World Haskell Chapter 7. IO **Category**:: #articles #readwise/articles **Category Icon**:: 📰 **URL**:: [book.realworldhaskell.org](https://book.realworldhaskell.org/read/io.html) **Host**:: [[book.realworldhaskell.org]] **Highlighted**:: [[2026-02-01]] **Created**:: [[2026-02-07]] ## Highlights - There are three pre-defined `Handle`s in `System.IO`. These `Handle`s are always available for your use. They are `stdin`, which corresponds to standard input; `stdout` for standard output; and `stderr` for standard error. ([View Highlight](https://read.readwise.io/read/01kgdqwcf6arjq7wba93hhmtrf)) ^983976865 - I/O actions are defined within the IO monad. ([View Highlight](https://read.readwise.io/read/01kgds91vkgm257dx1sbk6p1p3)) ^983984727 - You could think of it this way: every statement, except `let`, in a `do` block must yield an I/O action which will be executed. ([View Highlight](https://read.readwise.io/read/01kgdsc3var64wsmthqrnpf88r)) ^983984915 - `do` blocks are actually shortcut notations for joining together actions. There are two operators that you can use instead of `do` blocks: `>>` and `>>=`. ([View Highlight](https://read.readwise.io/read/01kgdsfnwrcy3w3echksmp4ypq)) ^983985049