ทำไม Haskell จึงไม่มีแลมบ์ดาระดับนามธรรม?


22

มีเหตุผลทางทฤษฎีบ้างไหม (เช่นว่าการตรวจสอบชนิดหรือการอนุมานประเภทจะไม่สามารถตัดสินใจได้) หรือเหตุผลเชิงปฏิบัติ (ยากเกินกว่าที่จะใช้อย่างถูกต้อง)

ปัจจุบันเราสามารถห่อสิ่งต่างๆให้เป็นnewtypeเช่นนั้นได้

newtype Pair a = Pair (a, a)

แล้วมี Pair :: * -> *

λ(a:*). (a,a)แต่เราไม่สามารถทำสิ่งที่ชอบ

(มีบางภาษาที่มีพวกเขาตัวอย่างเช่นScala ทำ )


4
การเลือกระบบชนิดหนึ่งที่ใช้อยู่นั้นไม่รวมระบบประเภทอื่นเนื่องจากระบบทั้งหมดต้องมีความสอดคล้องกัน แลมบ์ดาระดับประเภทจะแปลกมากในทฤษฎีหมวด ...
tp1

1
stackoverflow.com/questions/4922560/…มีความเกี่ยวข้องเช่นกัน
Edward Z. Yang

คำตอบ:


17

การอนุมานประเภทด้วย lambdas ระดับประเภทจะต้องมีการรวมคำสั่งที่สูงขึ้นซึ่งไม่สามารถตัดสินใจได้ นี่คือแรงจูงใจในการไม่อนุญาต แต่อย่างที่เกิดขึ้นกับคุณสมบัติที่ไม่สามารถตัดสินใจได้อื่น ๆ (เช่นการอนุมานประเภทสำหรับ GADT) อาจเป็นไปได้ที่จะต้องมีลายเซ็นของประเภทและอนุญาต ฉันไม่แน่ใจว่าใครก็ตามที่ถูกตรวจสอบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.