Zaczynam rozumieć, w jaki sposób forall
słowo kluczowe jest używane w tak zwanych „typach egzystencjalnych”, takich jak:
data ShowBox = forall s. Show s => SB s
Jest to jednak tylko podzbiór tego, w jaki sposób forall
jest używany i po prostu nie mogę skupić się na jego użyciu w takich rzeczach:
runST :: forall a. (forall s. ST s a) -> a
Lub wyjaśnienie, dlaczego są one różne:
foo :: (forall a. a -> a) -> (Char, Bool)
bar :: forall a. ((a -> a) -> (Char, Bool))
Lub cała RankNTypes
sprawa ...
Wolę raczej czysty, pozbawiony żargonu angielski niż te, które są normalne w środowisku akademickim. Większość wyjaśnień na ten temat (które mogę znaleźć w wyszukiwarkach) ma następujące problemy:
- Są niekompletne. Wyjaśniają, jedną część używania tego słowa kluczowego (na przykład „typów egzystencjalnych”), co sprawia, że czuję się szczęśliwy, dopóki nie przeczytałem kod, który używa go w zupełnie inny sposób (jak
runST
,foo
ibar
powyżej). - Są gęsto wypełnione założeniami, że czytałem najnowsze w jakiejkolwiek gałęzi dyskretnej matematyki, teorii kategorii lub algebry abstrakcyjnej, która jest popularna w tym tygodniu. (Jeśli nie czytam słowa „konsultować papier co do szczegółów realizacji” ponownie, będzie to zbyt szybko).
- Są napisane w sposób, który często zamienia nawet proste pojęcia w kręto pokręconą i złamaną gramatykę i semantykę.
Więc...
Przejdź do właściwego pytania. Czy ktoś może całkowicie wyjaśnić forall
słowo kluczowe w jasnym, prostym języku angielskim (lub, jeśli istnieje, wskazać tak jasne wyjaśnienie, którego mi brakowało), które nie zakłada, że jestem matematykiem pogrążonym w żargonie?
Edytowano, aby dodać:
Poniżej były dwie wyróżniające się odpowiedzi spośród tych o wyższej jakości, ale niestety mogę wybrać tylko jedną najlepszą. Odpowiedź Normana była szczegółowa i użyteczna, wyjaśniając rzeczy w sposób, który pokazał niektóre teoretyczne podstawy, forall
a jednocześnie pokazując niektóre praktyczne implikacje tego. odpowiedź yairchuobejmował obszar, o którym nikt inny nie wspomniał (zmienne typu o zasięgu) i zilustrował wszystkie pojęcia kodem i sesją GHCi. Gdyby możliwe było wybranie obu najlepiej, zrobiłbym to. Niestety nie mogę i po dokładnym przyjrzeniu się obu odpowiedziom zdecydowałem, że yairchu nieznacznie przewyższa Normana z powodu ilustracyjnego kodu i dołączonego wyjaśnienia. Jest to jednak trochę niesprawiedliwe, ponieważ naprawdę potrzebowałem obu odpowiedzi, aby zrozumieć to do tego stopnia, że forall
nie odczuwam lekkiego strachu, gdy widzę to w podpisie typu.