
Magicloud wrote:
Hi, As some articles say, do notation is expand to (>>) and (>>=) when being compiled. So I want to know the details. Like: main = do a <- getArgs b <- getLine myFunc1 (head a) b myFunc2 b (head a)
I cannot figure out what is the (>>) and (>>=) way of this.
Thanks.
In the beginning, their was the bind (>>=) operator and lambdas. You bind the results of one action to the argument of the next (act >>= \a -> act2 a) A genious realized that not all actions have an intersting result, so instead of a meaningless binding (act >>= \_ -> act2) you can sequence the actions (act >> act2). So code would look like: ------------------ main = getArgs >>= \a -> getLine >>= \b -> myFunc1 (head a) b >> myFunc2 b (head a) ------------------ It didn't take too long and people got in the habbit of lining up the binding on the right-most column: ------------------ main = getArgs >>= \a -> getLine >>= \b -> myFunc1 (head a) b >> myFunc2 b (head a) ------------------ And eventually someone figured out this looked an aweful lot like imparitive code with the variable and function flipped around (and some ugly characters inbetween). getArgs >>= \a -> ~ a = getArgs(); So the shortest most non-descript word, 'do', was found to ensure no one would have to type much. Tom * Story not historically accurate. Technical accuracy is questionable. Sanity of author not guarenteed. All rights reserved. No refunds.