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