Doubt regarding Types
kaykaydreamz at yahoo.com
Mon Nov 3 20:40:59 EST 2003
You are right . I had changed the code as follows -
run = do c <- getBoardSize
-- Get the board size as input
getBoardSize :: IO ( Int )
validateBoardSize :: Int -> IO ()
... and follows.
run function is the entry point.
--- Artie Gold <artiegold at austin.rr.com> wrote:
> 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
> > generator, "validateBoardSize (atoi c)" has type Bool, but it's
> > 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.
Do you Yahoo!?
Exclusive Video Premiere - Britney Spears
More information about the Haskell-Cafe