Haskell มีประเภทที่ขึ้นต่อกันหรือไม่


20

ฉันรู้ว่า Haskell มีความสามารถในการกำหนดประเภทของประเภทอื่น (คล้ายกับเทมเพลตการเขียนโปรแกรมใน C ++) แต่ฉันสงสัยว่า Haskell สามารถพาราเม็ตอัปประเภทที่มีค่ามากกว่าได้หรือไม่ ด้วยประเภทที่ขึ้นอยู่กับคุณสามารถมีประเภทที่ parametrised กว่าจำนวนเต็มเช่นเวกเตอร์ขนาด n, เมทริกซ์ของขนาด n × m เป็นต้น

ถ้าไม่ทำไมไม่ และมีความเป็นไปได้ที่จะรองรับในอนาคตหรือไม่?

คำตอบ:


18

Haskell ไม่มากมีชนิดขึ้นอยู่เต็มแม้ว่ามันจะได้รับอย่างใกล้ชิดที่มีนามสกุลเหมือนและDataKinds TypeFamiliesปัญหาในขณะนี้เท่าที่ฉันรู้ก็คือ Haskell ระดับค่ามีพื้นที่ชัดเจน แต่ Haskell ระดับประเภทไม่

นี้ไม่ได้หยุดคุณจากการ parametrizing ประเภทมากกว่าประเภทอื่น ๆรวมทั้งDataKind-lifting ของค่า ในฐานะของ GHC 7.6 และด้วยการDataKindsเปิดใช้งานคุณสามารถใช้เนเชอรัลและสตริงระดับประเภทรวมถึงทูเปิลระดับประเภทลิสต์ระดับประเภทและลิฟท์ระดับประเภทของลิฟท์ประเภทใดก็ได้ ชนิดข้อมูลพีชคณิตแบบไม่ จำกัด ซึ่งคล้ายกับความสามารถของ C ++ ในการใช้จำนวนเต็มในเทมเพลต


1
การเปลี่ยนแปลงที่จะเกิดขึ้นใน GHC 8 เพิ่มประเภทการพึ่งพาเต็มรูปแบบหรือไม่
Janus Troelsen

@JanusTroelsen ไม่มาก; พวกเขาช่วยให้ขึ้นอยู่กับชนิด
Flame ของ Ptharien

8

หากต้องการขยายเล็กน้อยเกี่ยวกับสิ่งที่ Flame ของ Ptharien อธิบายไว้อย่างดีเกี่ยวกับสถานะปัจจุบัน - และ GHC Haskell ดูเหมือนว่าจะเคลื่อนไหวต่อไปในทิศทางของประเภทพึ่งพา (ในขณะที่รักษาการแยกเฟส) กับแต่ละรุ่น

ดังนั้นสำหรับเช่นที่ ICFP 2013 ในเดือนกันยายนนี้กระดาษในขั้นตอนต่อไปของกระบวนการนี้ควรจะนำเสนอ"ไปสู่การพิมพ์ Haskell: System FC ที่มีความเสมอภาคอย่างเท่าเทียมกัน"เกี่ยวกับการยุบประเภทและระดับของประเภท ในฐานะที่ได้รับการประกาศให้เป็นแผนบาง 3 ปีที่แล้ว

และมันยังกล่าวถึงขั้นตอนต่อไป: "เรายังทราบว่าวิทยานิพนธ์ที่กำลังจะมาถึงของ Adam GundryจะรวมΠ-types ในเวอร์ชันของ System FC และเราจะต้องการให้คุณลักษณะนี้เป็นภาษาต้นฉบับด้วย (การสื่อสารส่วนตัว)"


2

Haskell พยายามที่จะปลอมแปลงแบบดั้งเดิม แต่ผลลัพธ์ที่ได้คือระบบการพิมพ์ที่ใหญ่และซ้ำซาก แต่สิ่งนี้อาจเปลี่ยนแปลงเร็ว ๆ นี้! ดู:

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