Estoy empezando a aprender Haskell . Soy muy nuevo en esto, y solo estoy leyendo un par de libros en línea para entender los conceptos básicos.
Uno de los 'memes' de los que las personas familiarizadas con él han hablado a menudo es el asunto "si se compila, funcionará *", lo que creo que está relacionado con la fuerza del sistema de tipos.
Estoy tratando de entender por qué exactamente Haskell es mejor que otros lenguajes estáticamente escritos a este respecto.
Dicho de otra manera, supongo que en Java, podría hacer algo atroz como enterrar
ArrayList<String>()
para contener algo que realmente debería ser ArrayList<Animal>()
. Lo atroz aquí es que string
contiene elephant, giraffe
, etc., y si alguien lo instala Mercedes
, su compilador no lo ayudará.
Si yo hice hacer ArrayList<Animal>()
a continuación, en algún momento posterior en el tiempo, si decido mi programa no es realmente acerca de los animales, se trata de vehículos, entonces puedo cambiar, por ejemplo, una función que produce ArrayList<Animal>
para producir ArrayList<Vehicle>
y mi IDE me informes en todas partes hay Es un descanso de compilación.
Mi suposición es que esto es lo que la gente quiere decir con un sistema de tipo fuerte , pero no es obvio para mí por qué Haskell es mejor. Dicho de otra manera, puedes escribir Java bueno o malo, supongo que puedes hacer lo mismo en Haskell (es decir, meter cosas en cadenas / ints que realmente deberían ser tipos de datos de primera clase).
Sospecho que me falta algo importante / básico.
¡Me encantaría que me mostraran el error de mis caminos!
Maybe
solo hacia el final. Si tuviera que elegir una cosa que los idiomas más populares deberían tomar prestada de Haskell, sería esta. Es una idea muy simple (por lo que no es muy interesante desde un punto de vista teórico), pero esto solo facilitaría mucho nuestro trabajo.