
"Cristian Baboi"
On Tue, 18 Dec 2007 11:56:36 +0200, Jon Fairbairn
wrote: "Cristian Baboi"
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 Jon.Fairbairn@cl.cam.ac.uk