P4-Ej6 Error

P4-Ej6 Error

de Santiago Agustín Silveira Pérez -
Número de respuestas: 1

Hola!

Estoy haciendo el ejercicio 6 del práctico 4, en particular las partes a y b. Definí lo que pide pero cuando intento probarlo me da error. Estas son mis definiciones:

class Sizeable a where
    size :: a -> Int
instance Sizeable Int where
    size :: Int -> Int
    size = abs
instance Sizeable Char where
    size :: Char -> Int
    size _ = 1

Si intento hacer por ejemplo size 1 me da un error grande que al principio dice:
error:

    * Ambiguous type variable `a0' arising from a use of `size'

      prevents the constraint `(Sizeable a0)' from being solved.

      Probable fix: use a type annotation to specify what `a0' should be.

Antes andaba, ponia size -2 y daba 2, pero de repente dejo de andar.

En respuesta a Santiago Agustín Silveira Pérez

Re: P4-Ej6 Error

de Germán Ferrari -
Hola Santiago.

El problema surge porque el literal 1 tiene un tipo más general que Int:

ghci> :t 1
1 :: Num a => a


Para acotar el tipo a Int, podes anotarlo directamente en la expresión, utilizando :: Int. En tu ejemplo quedaría:

ghci> size (1 :: Int)
1


Saludos,
Germán.