On 9 August 2011 10:49, Paul Reiners <[email protected]> wrote:
> Why am I getting this error:
>
>     Couldn't match expected type `Integer' against inferred type `Int'
>     In the expression: foldl step 0 xs
>     In the definition of `asInt_foldAux':
>         asInt_foldAux xs
>                         = foldl step 0 xs
>                         where
>                             step acc '.' = error "cannot handle decimal
> numbers"
>                             step acc x = acc * 10 + digitToInt x
>
> for this code?
>
> import Data.Char (digitToInt)
> asInt_fold :: String -> Integer
> asInt_fold ('-':xs) = -(asInt_foldAux xs)
> asInt_fold xs       = asInt_foldAux xs
> asInt_foldAux :: String -> Integer
> asInt_foldAux xs = foldl step 0 xs
>            where step acc '.' = error "cannot handle decimal numbers"
>                  step acc x = acc * 10 + digitToInt x

digitToInt returns an Int; as such the result of asInt_foldAux is an
Int, but you've specified in its type signature that it should be
returning an Integer.

> Note that I'm using Int, rather than Integer, to avoid silent overflow
> errors.

Should that be the other way round?

-- 
Ivan Lazar Miljenovic
[email protected]
IvanMiljenovic.wordpress.com

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

Reply via email to