"Cristian Baboi" <[EMAIL PROTECTED]> writes: > On Tue, 18 Dec 2007 11:56:36 +0200, Jon Fairbairn > <[EMAIL PROTECTED]> wrote: > >> "Cristian Baboi" <[EMAIL PROTECTED]> writes: > > >>> - the syntax for a block >> >> Not sure what you mean by "block". >> >> do a <- [1..10] >> b <- [3,4] >> return (a,b) >> >> is an expression... you can write that same expression as >> do {a <- [1..10]; b <- [3,4]; return (a,b)} too. > > > I mean anything that you can put between "{" "}", and between ";"
That's a bit like asking for the syntax of anything you can put between "(" and ")"; The braces are used for grouping, and can group different things: case 2 of {1 -> 2 ; 2 -> 2} do {a <- Just 1; return a} > Is this ([1 ,2 ,3 ,4]) a tuple or what ? > It has commas in it! Not in any meaningful sense... >>> - what guarantees are made by the LANGUAGE that an IO action >>> (such as do putStrLn "Hello world" ) is not performed >>> twice > >> As has been pointed out, «do putStrLn "Hello world"» is an >> expression that you can bind to a variable and use as many >> times as you like. > > Yes, but that was not the question. > What make you so sure it will be printed the exact number of > times you intended ? I don't understand your question at all, then. How many times it gets printed depends on how many times the programme is run, for one thing. Otherwise, it's a matter of the definition of the semantics of the language. Evaluation of a Haskell programme proceeds from evaluation of «main», which returns an object of type IO -- a sequence of Input/Output operatens -- that is "run". IO doesn't happen when you evaluate an IO action, it happens when the IO action is run. For example, if you define f x = seq (putStrLn "foo!") (x+1) and have main = print (f 2) the «putStrLn "foo!"» is evaluated because seq forces its first argument, but the only output you get is 3. >> This is a fundamental property of the language. A lambda >> expression is programme and at runtime the system doesn't >> know one lambda expression from another (all it can do with >> one is apply it to something). > > Even C can apply a function variable to an argument (function pointers). The secret of good language design is not what the language allows, it's what the language forbids. -- Jón Fairbairn [EMAIL PROTECTED] _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe