ฉันเริ่มเข้าใจวิธีการใช้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
ไม่ทำให้ฉันหวาดกลัวเมื่อฉันเห็นมันในลายเซ็นประเภท