Estoy leyendo a través de LYAH, y en el capítulo 9, encontré un problema curioso. El autor ofrece un ejemplo de la aplicación de la función "azares":Haskell: Implementar "randoms" (a.k.a., variable de tipo ambiguo)
randoms' :: (RandomGen g, Random a) => g -> [a]
randoms' gen = let (value, newGen) = random gen in value:randoms' newGen
Bueno, esto compila bien. Pero si cambio la segunda línea a:
randoms' gen = (fst (random gen)) : (randoms' (snd (random gen)))
El este error informes de archivos de carga:
IOlesson.hs:4:52:
Ambiguous type variable `a' in the constraint:
`Random a' arising from a use of `random' at IOlesson.hs:4:52-61
Probable fix: add a type signature that fixes these type variable(s)
Failed, modules loaded: none.
Si cambio de esta línea a:
randoms' gen = (fst (random gen)) : (randoms' gen)
entonces esto va a hacer precisamente bien, y como se esperaba, esto devolverá una lista de todos los elementos idénticos.
Estoy confundido: ¿Qué hay de diferente en la versión de Miran y en mi versión?
¡Gracias por cualquier idea!
Gracias! Esto es tan contra intuitivo, pero totalmente comprensible. –
De nada; los errores de ambigüedad de tipo de letra pueden ser complicados al principio, pero debe entenderlos pronto :) – ehird