Я начинаю изучать Хаскель . Я очень новичок в этом, и я просто читаю пару онлайн-книг, чтобы разобраться с его основными конструкциями.
Один из «мемов», о которых часто говорили знакомые с ним люди, - это целая вещь «если она скомпилируется, она будет работать», - я думаю, что это связано с силой системы типов.
Я пытаюсь понять, почему именно Хаскель лучше, чем другие статически типизированные языки в этом отношении.
Другими словами, я предполагаю, что в Java можно сделать что-то отвратительное, например, похоронить,
ArrayList<String>()
чтобы содержать то, что действительно должно быть ArrayList<Animal>()
. Отвратительная вещь в том, что вы string
содержите elephant, giraffe
и т. Д., И если кто-то вставит Mercedes
- ваш компилятор вам не поможет.
Если бы я это сделал, ArrayList<Animal>()
то в какой-то более поздний момент времени, если я решу, что моя программа на самом деле не о животных, а о транспортных средствах, то я могу изменить, скажем, функцию, которая производит ArrayList<Animal>
для производства, ArrayList<Vehicle>
и моя IDE должна сообщать мне везде это перерыв компиляции.
Я предполагаю, что это то, что люди подразумевают под сильной системой типов, но для меня не очевидно, почему Хаскелл лучше. Иными словами, вы можете написать хорошую или плохую Java, я предполагаю, что вы можете делать то же самое в Haskell (то есть, складывать вещи в строки / целые, которые действительно должны быть первоклассными типами данных).
Я подозреваю, что мне не хватает чего-то важного / основного.
Я был бы очень рад, если бы мне показали ошибки моих путей!
Maybe
только к концу. Если бы мне пришлось выбирать только одну вещь, которую более популярные языки должны позаимствовать у Haskell, это было бы так. Это очень простая идея (так что она не очень интересна с теоретической точки зрения), но только она сделает нашу работу намного проще.