I change as you said :

loop :: Int -> IO ()
loop n = do
    if n <= 100
    then do
        let x n = n * n;
        putStrLn (show n );
        putChar ' ';
        putStrLn (show x) ;
        loop (n + 1);
    else
       return () ;

main :: IO ()
main = loop 1

but now I see these errors :

Roelof




Roelof Wobben schreef op 10-5-2014 17:22:
Mateusz Lenik schreef op 10-5-2014 17:01:
Hi,

There are several issues with the code:

- type annotation states that the function returns 'IO ()', while on the else
   branch 'IO Int' is returned. To fix it you should either change the returned
   type to 'IO Int' or replace 'return n' with 'return ()';
- in do notation you have to use let syntax, so 'x n = n * n' should be
   'let x n = n * n';
- this brings us to another issue in line 'putStrLn (show x n)', which is
   equivalent to 'putStrLn ((show x) n)'. You should put parentheses explicitly
   to fix it, or change x definition to 'let x = n * n', so that you can just
   write 'putStrLn (show x)'.

Cheers!
Mateusz



Is it valid Haskell if I change the putStrln to putStrln ( show n * n) so I do not have to use the let command.
Another question if I change return n with return () does the loop ever end.  My feeling says not because the value of n is never updated for the loop.

Roelof

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe