[Haskell-cafe] Couldn't match expected type `Integer' against inferred type `Int'

Ivan Lazar Miljenovic ivan.miljenovic at gmail.com
Tue Aug 9 02:59:11 CEST 2011


On 9 August 2011 10:49, Paul Reiners <paul.reiners at gmail.com> 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
Ivan.Miljenovic at gmail.com
IvanMiljenovic.wordpress.com



More information about the Haskell-Cafe mailing list