Я починаю вивчати Хаскелл . Я дуже новачок у цьому, і я просто читаю пару онлайн-книг, щоб обернутися головою навколо її основних конструкцій.
Один із «мемів», про які часто говорили знайомі з ним, - це ціла річ, «якщо вона збирається, вона буде працювати *» - що, на мою думку, пов’язане з силою типової системи.
Я намагаюся зрозуміти, чому саме Haskell кращий, ніж інші статично набрані мови в цьому плані.
Інакше кажучи, я вважаю, що в Яві ви можете зробити щось грізне, як поховати,
ArrayList<String>()
щоб містити щось, що насправді має бути ArrayList<Animal>()
. Тут суттєвим є те, що ваш string
вміст містить elephant, giraffe
і т.д., і якщо хтось додає Mercedes
- ваш компілятор вам не допоможе.
Якщо я це зробив ArrayList<Animal>()
тоді, в якийсь пізній момент часу, якщо я вирішу, що моя програма не є справді про тварин, а про транспортні засоби, то я можу змінити, скажімо, функцію, яка виробляє, ArrayList<Animal>
щоб виробляти, ArrayList<Vehicle>
і мій IDE повинен мені говорити всюди там - компіляційна перерва.
Моє припущення, що це те, що люди мають на увазі під системою сильного типу, але мені не очевидно, чому в Haskell краще. По-іншому, ви можете писати добру або погану Java, я припускаю, що ви можете зробити те ж саме в Haskell (тобто вкладати речі в рядки / ints, які дійсно повинні бути першокласними типами даних).
Я підозрюю, що пропускаю щось важливе / базове.
Я був би дуже радий, щоб мені показали помилку моїх шляхів!
Maybe
лише до кінця. Якби мені довелося вибрати лише одне, що більш популярні мови повинні запозичити у Haskell, це було б саме. Це дуже проста ідея (настільки не дуже цікава з теоретичної точки зору), але це одне полегшило б наші робочі місця.