Sto iniziando a imparare l' Haskell . Sono molto nuovo, e sto solo leggendo un paio di libri online per capire meglio i suoi costrutti di base.
Uno dei "meme" di cui le persone che hanno familiarità hanno spesso parlato, è l'intera cosa "se si compila, funzionerà *" - che penso sia correlata alla forza del sistema dei tipi.
Sto cercando di capire perché esattamente Haskell è meglio di altri linguaggi staticamente tipizzati in questo senso.
Detto in altro modo, presumo in Java, potresti fare qualcosa di atroce come seppellire
ArrayList<String>()
per contenere qualcosa che dovrebbe davvero essere ArrayList<Animal>()
. La cosa odiosa qui è che i tuoi string
contenuti elephant, giraffe
, ecc., E se qualcuno li inserisce Mercedes
, il tuo compilatore non ti aiuterà.
Se ho fatto fare ArrayList<Animal>()
poi, ad un certo punto più avanti nel tempo, se decido il mio programma non è realmente di animali, si tratta di veicoli, allora posso cambiare, per esempio, una funzione che produce ArrayList<Animal>
per la produzione ArrayList<Vehicle>
e la mia IDE mi dovrei dire ovunque ci è una pausa di compilazione.
La mia ipotesi è che questo è ciò che la gente intende con un sistema di tipo forte , ma non è ovvio per me perché Haskell sia migliore. Detto in altro modo, puoi scrivere Java buoni o cattivi, suppongo che tu possa fare lo stesso in Haskell (cioè inserire cose in stringhe / ints che dovrebbero davvero essere tipi di dati di prima classe).
Sospetto che mi manchi qualcosa di importante / di base.
Sarei molto felice di mostrarmi l'errore dei miei modi!
Maybe
solo verso la fine. Se dovessi scegliere solo una cosa che le lingue più popolari dovrebbero prendere in prestito da Haskell, sarebbe così. È un'idea molto semplice (quindi non molto interessante da un punto di vista teorico), ma questo da solo renderebbe i nostri lavori molto più facili.