Я починаю розуміти, як 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
матеріал ...
Я, як правило, віддаю перевагу зрозумілій англійській мові, що не містить жаргону, а не ті мови, які є нормальними в академічних умовах. Більшість пояснень, які я намагаюся прочитати на цьому (ті, які я можу знайти через пошукові системи), мають такі проблеми:
- Вони неповні. Вони пояснюють одну частину використання цього ключового слова (наприклад , «екзистенційні типи») , яка змушує мене відчувати себе щасливим , поки я не прочитав код , який використовує його в абсолютно по- іншому (як
runST
,foo
іbar
вище). - Вони щільно переповнені припущеннями, що я читав останнє в будь-якій галузі дискретної математики, теорії категорій або абстрактної алгебри, популярні на цьому тижні. (Якщо я ніколи не прочитаю слів "проконсультуйтеся в документі, будь ласка, щодо деталей реалізації", це буде занадто рано.)
- Вони написані способами, які часто перетворюють навіть прості поняття в закрутнену і переломову граматику та семантику.
Тому...
На власне питання. Чи може хтось повністю пояснити forall
ключове слово чіткою, простою англійською мовою (або, якщо вона десь існує, вказати на таке чітке пояснення, яке я пропустив), що не припускає, що я математик, пронизаний жаргоном?
Відредаговано, щоб додати:
Нижче було два відмінних відповіді з більш якісних, але, на жаль, я можу вибрати лише один як найкращий. Відповідь Нормана була детальною і корисною, пояснюючи речі таким чином, що показувала деякі теоретичні основи forall
і в той же час показувала мені деякі практичні наслідки цього. відповідь yairchuохоплював область, про яку ніхто інший не згадував (змінні типу типу) та ілюстрував усі концепції з кодом та сеансом GHCi. Якби можна було вибрати обидва як найкращих, я б. На жаль, я не можу, і, уважно переглянувши обидві відповіді, я вирішив, що yairchu трохи перевершує Норман через ілюстративний код та додане пояснення. Однак це трохи несправедливо, тому що насправді мені потрібні були обидві відповіді, щоб зрозуміти це до того моменту, що forall
не залишає мене слабкого почуття страху, коли я бачу це в підписі типу.