Doubt regarding Types
artiegold at austin.rr.com
Mon Nov 3 21:54:28 EST 2003
Hal Daume III wrote:
> 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.
>>-- 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? That should
guide the rest of the design.
 The question is rhetorical.
Artie Gold -- Austin, Texas
Oh, for the good old days of regular old SPAM.
More information about the Haskell-Cafe