Tengo una pregunta bastante general sobre el sistema de tipos de Haskell. Estoy tratando de familiarizarse con él, y tengo la siguiente función:Tipo específico de devolución dentro de Haskell
getN :: Num a => a
getN = 5.0 :: Double
Cuando intento compilar esto, me sale el siguiente error:
Couldn't match expected type `a' against inferred type `Double'
`a' is a rigid type variable bound by
the type signature for `getN' at Perlin.hs:15:12
In the expression: 5.0 :: Double
In the definition of `getN': getN = 5.0 :: Double
Según tengo entendido esto, el la función está configurada para "devolver" un tipo en la clase Num. El doble está en esta clase (http://www.zvon.org/other/haskell/Outputprelude/Num_c.html), así que habría esperado que estaría bien "devolver" un Doble en este caso.
¿Alguien puede explicar esto por favor?
+1 - Podemos escribir el tipo de función anterior como 'forall a. Num a => a' -> Tiene que funcionar * para cualquier tipo *. – Dario