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.

_______________________________________________
Haskell-Cafe mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to