Что делает ключевое слово 'forall' в Haskell/GHC?



я начинаю понимать, как forall ключевое слово используется в так называемых "экзистенциальных типов" вроде этого:

data ShowBox = forall s. Show s => SB s

это только подмножество, однако, как forall используется, и я просто не могу обернуть свой ум вокруг его использования в таких вещах, как это:

runST :: forall a. (forall s. ST s a) -> a

или объясняя, почему они разные:

foo :: (forall a. a -> a) -> (Char,Bool)
bar :: forall a. ((a -> a) -> (Char, Bool))

и все RankNTypes вещи...

я предпочитаю ясный, жаргон-свободный английский язык, а не виды языка которые являются нормальными в академической среде. Большинство объяснений, которые я пытаюсь прочитать на этом (те, которые я могу найти через поисковые системы), имеют следующие проблемы:

  1. они неполны. Они объясняют одну часть использования этого ключевого слова (например, "экзистенциальные типы"), что заставляет меня чувствовать себя счастливым, пока я не прочитаю код, который использует его совершенно по-другому (например,runST,foo и bar выше).
  2. они плотно упакованы с предположениями, что я прочитал последнее в любой отрасли дискретной математики, теории категорий или абстрактной алгебры популярно на этой неделе. (Если я никогда не читал слова " обратитесь к бумаге все для деталей реализации " опять же, это будет слишком рано.)
  3. они написаны таким образом, что часто превращают даже простые понятия в мучительно искаженную и сломанную грамматику и семантику.

так...

к актуальному вопросу. Может кто-нибудь полностью объяснить forall ключевое слово на ясном, простом английском языке (или, если оно где-то существует, указывает на такое четкое объяснение, которое я пропустил), которое не предполагает, что я математик, погруженный в жаргон?


редактировать, чтобы добавить:

было два выдающихся ответа из более качественных ниже, но, к сожалению, я могу выбрать только один из них. Нормана!--43--> был подробным и полезным, объясняя вещи таким образом, что показал некоторые из теоретические основы forall и в то же время, показывая мне некоторые практические последствия этого. yairchu это!--43--> охватил область, которую никто больше не упоминал (переменные типа scoped), и проиллюстрировал все концепции с помощью кода и сеанса GHCi. Если бы это было возможно, чтобы выбрать оба как лучше, я бы. К сожалению, я не могу, и, внимательно изучив оба ответа, я решил, что яирчу немного выходит из Нормана из-за иллюстративного кода и прилагается объяснение. Это немного несправедливо, однако, потому что на самом деле мне нужны были оба ответа, чтобы понять это до такой степени, что forall не оставляет меня со слабым чувством страха, когда я вижу его в подписи типа.

173   0  
    Ничего не найдено.

Добавить ответ:
Отменить.