[Haskell-cafe] Type error in final generator

2007-12-08 Thread Loganathan Lingappan
Hi,
I am new to Haskell. I wrote the following code:

module Main
where

import IO

main = do
hSetBuffering stdin LineBuffering
numList - processInputs
foldr (+) 0 numList

processInputs = do
putStrLn Enter a number:
strNum - getLine
let num = read strNum
if num == 0
then return []
else do
rest - processInputs
return (num : rest)


And am getting the following errors:

ERROR Ex310.hs:6 - Type error in final generator
*** Term   : foldr (+) 0 numList
*** Type   : Integer
*** Does not match : IO a

Any pointers to the source of this error would be appreciated.
Thanks,
Logo

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


Re: [Haskell-cafe] Type error in final generator

2007-12-08 Thread Bryan O'Sullivan
Loganathan Lingappan wrote:

 main = do
 hSetBuffering stdin LineBuffering
 numList - processInputs
 foldr (+) 0 numList

The type of main is understood to be IO (), so it can't return anything.
 You could work around this by rewriting the last line above as follows:

print (foldr (+) 0 numList)

This prints the number, which is presumably what you want, and print has
type IO (), so it works out nicely here.

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


Re: [Haskell-cafe] Type error in final generator

2007-12-08 Thread Derek Elkins
On Sat, 2007-12-08 at 16:39 -0800, Bryan O'Sullivan wrote:
 Loganathan Lingappan wrote:
 
  main = do
  hSetBuffering stdin LineBuffering
  numList - processInputs
  foldr (+) 0 numList
 
 The type of main is understood to be IO (), so it can't return anything.
  You could work around this by rewriting the last line above as follows:
 
 print (foldr (+) 0 numList)
 
 This prints the number, which is presumably what you want, and print has
 type IO (), so it works out nicely here.

Nitpicking:

Actually, as the error message says, the type of main is IO a so it can
'return' -anything- and that will be discarded as the type makes clear.
The issue is that foldr (+) 0 numList :: Integer and that's not IO a for
any a.  Either way, Bryan's suggestion is probably what you want.

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


Re: [Haskell-cafe] Type error in final generator

2007-12-08 Thread Loganathan Lingappan
Thanks Bryan and Derek. This works!
Logo

- Original Message 
From: Derek Elkins [EMAIL PROTECTED]
To: Bryan O'Sullivan [EMAIL PROTECTED]
Cc: Loganathan Lingappan [EMAIL PROTECTED]; haskell-cafe@haskell.org
Sent: Saturday, December 8, 2007 4:53:54 PM
Subject: Re: [Haskell-cafe] Type error in final generator


On Sat, 2007-12-08 at 16:39 -0800, Bryan O'Sullivan wrote:
 Loganathan Lingappan wrote:
 
  main = do
  hSetBuffering stdin LineBuffering
  numList - processInputs
  foldr (+) 0 numList
 
 The type of main is understood to be IO (), so it can't return
 anything.
  You could work around this by rewriting the last line above as
 follows:
 
 print (foldr (+) 0 numList)
 
 This prints the number, which is presumably what you want, and print
 has
 type IO (), so it works out nicely here.

Nitpicking:

Actually, as the error message says, the type of main is IO a so it can
'return' -anything- and that will be discarded as the type makes clear.
The issue is that foldr (+) 0 numList :: Integer and that's not IO a
 for
any a.  Either way, Bryan's suggestion is probably what you want.




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