On Sun, May 15, 2011 at 9:27 AM, Christopher Howard <christopher.howard@frigidcode.com> wrote:
I understand that one can bind the unwrapped results of IO functions to
variables, and pass them to functions, like so:

main = do filecontents <- readFile "data.txt"
         putStrLn filecontents

But does the syntax allow you to cut out the middle man, so to speak,
and bind the results directly to the parameter? Like

-- Tried this and it didn't work.
main = do putStrLn (<- readFile "data.txt")

do-notation is just syntactic sugar for the ">>" and ">>=" operators. Your example gets translated internally to:

    readFile "data.txt" >>= \filecontents -> putStrLn filecontents

To get rid of that extra "filecontents", you could instead write:

    readFile "data.txt" >>= putStrLn

HTH,
Michael