Математика, необхідна для розуміння теорії, що стоїть за типовою системою Хаскелла?


9

Останнім часом я дуже зацікавився Haskell.

Намагаючись вивчити нові поняття (наприклад, ключове слово forall та ST monad ) та систему типів Haskell взагалі, я постійно стикаюся з поняттями з теорії категорій та обчислення лямбда . Отже, мені цікаво:

  1. Які ще галузі математики важливі для міцного розуміння типової системи Хаскелла?

  2. Чи можу я відмовитися від ретельного вивчення цих математичних питань і замість цього зосередитись на певних відповідних концепціях? (наприклад, кількісні показники в обчисленні лямбда.) Якщо так, то які поняття є важливими?

Я сподіваюсь, що незабаром підберуть типи та мови програмування , проте, будь ласка, запропонуйте будь-які альтернативні ресурси для читання, які вам здадуться потрібними.


4
Теорія категорій не є важливою для знання та роботи з Haskell, але вона може допомогти в деяких основоположних концепціях. Єдина реальна галузь математики, з якої можна зрозуміти цей предмет, - це Теорія категорій, вона не тільки вкорінена там, але в ній ви знайдете невелику залежність від інших математик, це дуже ізольована область. Візьміть обчислення лямбда та вивчіть системи різного типу, пов’язані з різними варіантами лямбда, та крім того, прочитайте цю відповідь ТА та прочитайте про теорію категорій.
Джиммі Хоффа

3
Я б не настільки захопився оволодіння системою базового типу. Принаймні, не дозволяйте не знати, що все заважає вам виконати пару проектів. Просто виконання декількох простих проектів у Haskell дозволило мені побачити математичну красу за нею і змусило мене зрозуміти це.
ChaosPandion

2
@ChaosPandion Я згоден з цією точкою зору, але я працював над проектом, який може вимагати написання коду в STмонаді. Складно писати код, який буде складатись, коли я не розумію всіх відповідних підписів типів, тому я вважав, що поліпшення свого розуміння системи типів було б доцільним.
Роб

3
@robjb - Я, безумовно, згоден з вами, що глибше розуміння є доцільним. Чесно кажучи, мій коментар був направлений більше на загальну аудиторію, яка, можливо, здасться Haskell занадто залякаючою, щоб навіть спробувати.
ChaosPandion

Відповіді:


11

Ні, вам не потрібно брати книгу з теорії категорій, щоб зрозуміти Haskell.

Я декілька років використовую Haskell і з цікавості підібрав якусь теорію категорій, це справді не потрібно. З одного боку, здорово бачити, як усі ці абстракції вписуються в "велику картину", але я не пішов "О мій боже, мені просто потрібно зробити це профайнерами від Maybeкатегорії до []s, і тоді я можу зберегти принцесо! ».

Тепер залежно від того, що ти робиш із теорією типу Haskell, знаходиться на огорожі.

Якщо ви просто вивчаєте haskell , не намагайтеся зрозуміти кожен нюанс системи типу . Будь ласка, не варто, це як спробувати спочатку вивчити метапрограмування шаблонів на C ++. Фантазійні типи - чудові інструменти, але добре розуміння функціонального програмування перемагає розуміння непередбачуваного поліморфізму.

Тепер скажімо, через рік-два Haskell ви шукаєте, щоб зрозуміти кожну найтоншу частину того, як працює система типів Haskell, тоді так, якась теорія типів може бути корисною.

Це допоможе вам зрозуміти деяку логіку, якою працюють справи, плюс це, відверто кажучи, справді класна галузь ІМО інформатики, яку варто подивитися. Ви можете вибрати вишні частини, які вас зацікавили, і все одно навчитися пристойної кількості.

Для Haskell, дивлячись на STLC, системи типу HM (System F) та, можливо, куб лямбда (Haskell є System Fw iirc) та ізорекурсивні типи. Типи та мови програмування - це чудовий ресурс для початку та охоплює все це та багато іншого.

Якщо ви дійсно хочете випити круту допомогу і дізнаєтесь, що ви теоретик-початківець, натисніть на Агду чи Кок. Вони мають "залежні типи" на крок далі в кубі лямбда, ніж у Haskell. Залежні типи нехай типи залежать від термінів. Це означає, що типи досить потужні, щоб фактично довести теореми. Для допитливих гугла "ізоморфізм каррі-хоарда" повинен принести кілька цікавих результатів.


Короткий опис Агди та Кока буде корисним.
ChaosPandion

@ChaosPandion Оновлено
Daniel Gratzer

Це здається гарним. Я подумав, що просто сказати імен не буде достатньо, щоб підкорити інтереси багатьох людей.
ChaosPandion
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.