
On Mon, Oct 11, 2004 at 04:32:08PM +0400, Serge D. Mechveliani wrote:
First, thanks to the people who correct me about `equivalence', (I skip the name because the letter was addressed privately).
Because we do not mean to compile each program to the equivalent one of error "bottom"
Your proposal is more in the direction to allow the program `print (let x = x::Int in x)' to print 42 :-)
The simplified version of the program is
main = hSetBuffering stdout NoBuffering >> putStr (out "\n")
out :: String -> String
out = let valueTakingLong = last [1 .. (10^7)] > 0 in if valueTakingLong then ('a' :) . ('b' :) else ('a' :) . ('b' :)
The author intended 'a' to appear immediately. But it appears only after a long time.
Then the author has to write out accordingly. Compare with: primes :: [Integer] primes = ... main = if (odd (last primes)) then putStrLn "There is a largest prime number!" >> putStrLn "It is odd!" else putStrLn "There is a largest prime number!" >> putStrLn "It is 2!" I would not want to have that changed to main = putStrLn "There is a largest prime number!" >> if (odd (last primes)) then putStrLn "It is odd!" else putStrLn "It is 2!" Another example is in the use of `interact'. You dot not want to print a partial answer before a question is given. Greetings, Carsten -- Carsten Schultz (2:38, 33:47), FB Mathematik, FU Berlin http://carsten.codimi.de/ PGP/GPG key on the pgp.net key servers, fingerprint on my home page.