Soy nuevo en Haskell y estoy tratando de entender por qué uno tiene que escribir el tipo de declaraciones. Desde Haskell tiene la inferencia de tipos, cuando tengo la primera línea? El INTÉRPRETE parece generar la salida correcta con el uso ':t'
El único ejemplo que he encontrado hasta ahora que parece que necesita una declaración es la siguiente.
maximum' :: (Ord a) => [a] -> a
maximum' = foldr1 max
Sin embargo, si puedo añadir "-XNoMonomorphismRestriction" bandera de la declaración no es necesario de nuevo. Hay situaciones específicas en la inferencia de tipos no funciona y hay que especificar los tipos?
Ya me podría haber un error en la declaración de tipo y ningún beneficio directo, prefiero no escribir. De nuevo, acabo de empezar a aprender Haskell, así que por favor me corrija si me equivoco, como quiero a desarrollar buenos hábitos.
EDIT: resulta que el Tipo de inferencia es una espada de doble filo de la sección de el Mundo Real Haskell libro tiene una buena discusión de este tema.