[Haskell-beginners] More direct binding of IO result

Michael Snoyman michael at snoyman.com
Sun May 15 08:29:10 CEST 2011


On Sun, May 15, 2011 at 9:27 AM, Christopher Howard <
christopher.howard at 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20110515/c3d5054f/attachment.htm>


More information about the Beginners mailing list