
Hi Artie,
You are right . I had changed the code as follows -
run = do c <- getBoardSize
validateBoardSize c
-- Get the board size as input
getBoardSize :: IO ( Int )
validateBoardSize :: Int -> IO ()
... and follows.
run function is the entry point.
Cheers
Karthik.
--- Artie Gold
Hal Daume III wrote:
Hi,
On Mon, 3 Nov 2003, Karthik Kumar wrote:
-- Convert a string to an integer. -- This works perfectly fine. atoi :: [Char] -> Int atoi (h : []) = if isDigit h then digitToInt h else 0 atoi (h : t) = if isDigit h then digitToInt h * ( 10 ^ length t) + atoi t else 0
you can use "read" for this.
-- validateBoardSize -- To validate the board size validateBoardSize :: Int -> Bool validateBoardSize d = (d == 9 || d == 13 || d == 19 )
this looks fine
getBoardSize :: IO Bool -- TODO : What could be the type of getBoardSize getBoardSize = do c <- getLine validateBoardSize ( atoi c )
ERROR "test1.hs":21 - Type error in final generator *** Term : validateBoardSize (atoi c) *** Type : Bool *** Does not match : IO a
this is telling you something important. it's saying that the final generator, "validateBoardSize (atoi c)" has type Bool, but it's expecting it to have type IO something. You need to "lift" the pure Bool value into IO by saying return:
getBoardSize = do c <- getLine return (validateBoardSize (read c))
Of course the board size is now lost and gone forever (and a function called `getBoardSize' returning an IO Bool is, well, a little counterintuitive). ;-)
To the OP: What does the top level code look like?[1] That should guide the rest of the design.
HTH, --ag
[1] The question is rhetorical. -- Artie Gold -- Austin, Texas Oh, for the good old days of regular old SPAM.
__________________________________ Do you Yahoo!? Exclusive Video Premiere - Britney Spears http://launch.yahoo.com/promos/britneyspears/