Zaczynam się uczyć Haskella . Jestem bardzo nowy i czytam tylko kilka książek online, aby omówić jego podstawowe konstrukcje.
Jednym z „memów”, o których często go znają ludzie, jest cała rzecz „jeśli się skompiluje, zadziała *” - co moim zdaniem jest związane z siłą systemu typów.
Próbuję zrozumieć, dlaczego właśnie Haskell jest lepszy niż inne statycznie pisane języki pod tym względem.
Innymi słowy, zakładam, że w Javie można zrobić coś haniebnego, na przykład zakopać,
ArrayList<String>()
aby zawierać coś, co naprawdę powinno być ArrayList<Animal>()
. Obrzydliwe jest to, że string
zawiera elephant, giraffe
, itp., A jeśli ktoś w to Mercedes
włączy - kompilator ci nie pomoże.
Jeśli tak zrobię ArrayList<Animal>()
, to w późniejszym czasie, jeśli zdecyduję, że mój program nie jest tak naprawdę o zwierzętach, dotyczy pojazdów, wtedy mogę zmienić, powiedzmy, funkcję, która produkuje, ArrayList<Animal>
aby produkować, ArrayList<Vehicle>
a moje IDE powinno mi powiedzieć wszędzie to przerwa w kompilacji.
Zakładam, że to właśnie ludzie rozumieją przez silny system typów, ale nie jest dla mnie oczywiste, dlaczego Haskell jest lepszy. Innymi słowy, możesz napisać dobrą lub złą Javę, zakładam, że możesz zrobić to samo w Haskell (tzn. Wstawiać rzeczy w ciągi znaków / ints, które powinny być naprawdę pierwszorzędnymi typami danych).
Podejrzewam, że brakuje mi czegoś ważnego / podstawowego.
Byłbym bardzo szczęśliwy, gdybym pokazał błąd moich działań!
Maybe
tylko pod koniec. Gdybym musiał wybrać tylko jedną rzecz, którą bardziej popularne języki powinny pożyczyć od Haskell, to byłoby to. To bardzo prosty pomysł (z teoretycznego punktu widzenia niezbyt interesujący), ale już samo to znacznie ułatwiłoby nam pracę.