
On Tue, 18 Dec 2007 10:29:43 +0200, Miguel Mitrofanov
What I should have been told about upfront: - the syntax for an expression - the syntax for a block
Don't see your point.
The point is the syntax is introduced as transformation of layout form to non layout form. As a user, I just want to be able to spot the basic components of a source file without thinking about transformation rules.
- the adhoc syntax rules (how to distinguish among a tuple and a pharanthesized expression and how to find the start and end of a block for example )
Oh, that's pretty easy, parenthesized expression is not divided by a comma.
Thanks! What is the end of a block ? What introduce new blocks ? Is this legal (`plus`) x y ? It's this a tuple ? ([a,b,c,d ]) ? etc.
- what guarantees are made by the LANGUAGE that an IO action (such as do putStrLn "Hello world" ) is not performed twice
There are no such guarantees. If you write
a = putStrLn "Hello world" main = do {a; a;}
then your putStrLn would be performed twice. IO actions are first-class values, that's a feature, not a bug.
What guarantees that by running the main, the string "Hello world" will be printed exactly twice ?
- the lambda expressions can be written (input) but cannot be printed (output)
Yes, since two different lambda expressions can denote the same function. I just want the sistem to be able to print one of these expressions !
Its this too much to ask ? I find it very strange that I can write a lambda expresion, but the system cannot.
No, pattern matching bounds variables; if you write "case x of {aa -> ...} then aa becomes a LOCAL variable for the case statement, and shadows the global definition. The same applies to u and v in h, except that in this case local variables shadow upper-level local variables.
Ok. ________ Information from NOD32 ________ This message was checked by NOD32 Antivirus System for Linux Mail Servers. part000.txt - is OK http://www.eset.com