
On 06/07/2011 04:54 AM, Mats Rauhala wrote:
On 04:30 Tue 07 Jun , Christopher Howard wrote:
In a reply to an earlier question, someone told me that "do" expressions are simply syntactic sugar that expand to expressions with the >> and
= operators. I was trying to understand this (and the Monad class) better.
I see in my own experiments that this...
main = do ln1 <- getLine putStrLn ln1
translates to this:
main = getLine >>= \ln1 -> putStrLn ln1
However, what does this translate to?:
main = do ln1 <- getLine ln2 <- getLine putStrLn (ln1 ++ ln2)
It translates to:
main = getLine >>= \ln1 -> getLine >>= \ln2 -> putStrLn (ln1 ++ ln2)
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
Thank you Fischer and Rauhala for your prompt and helpful responses. One final point of clarification, on a related note: am I correct in reasoning that... main = do let x = expression /remainder/ is the equivalent of... main = let x = expression in /expanded remainder/ so that, for example... main = ln1 <- getline let ln2 = "suffix" putStrLn (ln1 ++ ln2) would translate to... main = let ln2 = "suffix" in getLine >>= \ln1 -> putStrLn (ln1 ++ ln2) This above example works, but I want to be sure I haven't misunderstood any important technical points. -- frigidcode.com theologia.indicium.us