Математика должна была понять теорию позади системы типов Хаскелла?

9

Недавно я глубоко заинтересовался Хаскеллом.

Пытаясь изучить новые концепции (например, ключевое слово forall и монаду ST ) и систему типов Хаскеля в целом, я постоянно сталкиваюсь с понятиями из теории категорий и лямбда-исчисления . Итак, мне интересно:

  1. Какие другие разделы математики важны для глубокого понимания системы типов Хаскелла?

  2. Могу ли я отказаться от тщательного изучения математики и сосредоточиться на определенных подходящих понятиях? (например, квантификаторы в лямбда-исчислении.) Если да, то какие понятия важны?

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

обкрадывать
источник
4
Теория категорий не обязательна для знания и работы с Haskell, но может помочь с некоторыми основополагающими концепциями. Единственная реальная ветвь математики, из которой можно понять этот материал, - это теория категорий, она не только укоренена там, но в ней вы найдете небольшую зависимость от других математик, это очень изолированная область в этом смысле. Возьмите лямбда-исчисление и изучите различные системы типов, связанные с разными лямбда-переменными, кроме этого прочитайте этот SO-ответ и прочитайте о теории категорий.
Джимми Хоффа
3
Я бы так не увлекся освоением базовой системы типов. По крайней мере, не позволяйте незнанию всего помешать вам завершить пару проектов. Просто завершение нескольких простых проектов в Haskell позволило мне увидеть математическую красоту этого и заставило меня понять это.
ChaosPandion
2
@ChaosPandion Я согласен с этой точкой зрения, но я работаю над проектом, который может потребовать написания кода в STмонаде. Трудно написать код, который будет компилироваться, когда я не понимаю всех соответствующих сигнатур типов, поэтому я чувствовал, что было бы разумно улучшить мое понимание системы типов.
Роб
3
@robjb - я, безусловно, согласен с вами, что более глубокое понимание является разумным. Честно говоря, мой комментарий был направлен больше на широкую аудиторию, которая может посчитать Хаскелла слишком пугающим, чтобы даже пытаться.
ChaosPandion

Ответы:

11

Нет, вам не нужно поднимать книгу по теории категорий, чтобы понять Haskell.

Я использую Haskell в течение нескольких лет, и из любопытства подобрал некоторую теорию категорий, в этом действительно нет необходимости. С одной стороны, здорово видеть, как все эти абстракции вписываются в «общую картину», но я не сказал «О, черт возьми, мне просто нужно сделать этого профессора из Maybeкатегории в []s, а затем я могу сохранить принцесса!».

Теперь, в зависимости от того, что вы делаете с теорией типов Хаскелла, стоит на пороге.

Если вы только изучаете haskell , не пытайтесь понять каждый нюанс системы типов . Пожалуйста, не надо, это все равно, что пытаться сначала изучить метапрограммирование на C ++. Необычные типы являются отличными инструментами, но хорошее понимание функционального программирования превосходит понимание непредсказуемого полиморфизма.

Теперь, скажем, через год или два из Haskell вы хотите понять каждую тонкую часть работы системы типов Haskell, тогда да, некоторая теория типов может оказаться полезной.

Это поможет вам понять некоторую логику, лежащую в основе того, как все работает, плюс, честно говоря, это действительно крутая отрасль компьютерных наук IMO, на которую стоит обратить внимание. Вы можете выбрать те части, которые вас интересуют, и при этом узнать приличную сумму.

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

Если вы действительно хотите выпить классную помощь и обнаружите, что вы - начинающий теоретик, идите тыкать в Agda или Coq. Они имеют «зависимые типы», на один шаг дальше в лямбда-кубе, чем Haskell. Зависимые типы позволяют типам зависеть от условий. Это означает, что типы достаточно сильны, чтобы фактически доказать теоремы. Для любопытных, поиск в Google "изоморфизма Карри Ховарда" должен принести некоторые интересные результаты.

Даниэль Гратцер
источник
Краткое описание Agda и Coq было бы полезно.
ChaosPandion
@ChaosPandion Обновлено
Даниэль Гратцер
Это кажется хорошим. Я подумал, просто сказать, что имена не будут достаточно, чтобы возбудить интересы многих людей.
ChaosPandion