สำหรับการประมาณลำดับที่หนึ่งภาษาอื่น ๆ ส่วนใหญ่ (อ่อนและ / หรือพิมพ์ไม่ได้) ไม่สนับสนุนการแยกระดับภาษาที่เข้มงวดระหว่าง
- ข้อเสนอ (เช่นประเภท)
- หลักฐาน (เช่นโปรแกรมที่แสดงให้เห็นถึงวิธีการที่เราสามารถสร้างข้อเสนอจากชุดของวิทยาการและ / หรืออื่น ๆที่สูงขึ้นเพื่อสร้าง)
และความสัมพันธ์ที่เข้มงวดระหว่างคนทั้งสอง หากมีสิ่งใดสิ่งที่ดีที่สุดรับประกันได้ว่าภาษาอื่น ๆ
- เนื่องจากข้อ จำกัด ที่ จำกัด ของอินพุตรวมถึงสิ่งที่เกิดขึ้นในสภาพแวดล้อมในเวลานั้นเราสามารถสร้างมูลค่าด้วยข้อ จำกัด ที่ จำกัด (ประเภทสแตติกดั้งเดิม cf C / Java)
- ทุกโครงสร้างมีประเภทเดียวกัน (ประเภทไดนามิก, cf ruby / python)
โปรดทราบว่าตามประเภทเราหมายถึงข้อเสนอและด้วยเหตุนี้สิ่งที่อธิบายข้อมูลเพิ่มเติมแล้วก็เป็นเพียงintหรือบูล ใน Haskell จะมีการเปลี่ยนแปลงของฟังก์ชันที่ได้รับผลกระทบจากอาร์กิวเมนต์เท่านั้น - ไม่มีข้อยกเว้น *
เพื่อความเข้มงวดมากขึ้นแนวคิดทั่วไปก็คือโดยการบังคับใช้วิธีการที่ซับซ้อน (เกือบ) โปรแกรมทั้งหมดที่สร้างขึ้น (เช่นเราสามารถพิสูจน์ได้ว่าเราสามารถสร้าง) และ จำกัด ชุดโครงสร้างดั้งเดิมในเช่น ทางที่เรามี
- ข้อเสนอที่เข้มงวดสำหรับภาษาดั้งเดิมทั้งหมด
- ชุดกลไกที่ จำกัด ซึ่งอาจรวมเข้าด้วยกัน
สิ่งปลูกสร้าง Haskell มีแนวโน้มที่จะปล่อยกู้ตัวเองได้ดีมากเพื่อให้เหตุผลเกี่ยวกับพฤติกรรมของพวกเขา หากเราสามารถสร้างหลักฐาน (read: function) เพื่อพิสูจน์ว่าA
มีความหมายB
ก็จะมีคุณสมบัติที่มีประโยชน์มาก :
- มันถืออยู่เสมอ (ตราบใดที่เรามี
A
เราสามารถสร้างได้B
)
- ความหมายนี้อาศัยเพียงบน
A
และไม่มีอะไรอื่น
ทำให้เราสามารถให้เหตุผลเกี่ยวกับค่าคงที่ท้องถิ่น / สากลได้อย่างมีประสิทธิภาพ เพื่อกลับไปที่คำถามเดิม คุณสมบัติทางภาษาของ Haskell ที่น่าสนใจที่สุดก็คือ:
- ความบริสุทธิ์ / การแบ่งส่วนของเอฟเฟกต์เป็นโครงสร้างที่ชัดเจน (เอฟเฟ็กต์เป็นสาเหตุและพิมพ์!)
- การอนุมานประเภท / การตรวจสอบในคอมไพเลอร์ Haskell
- ความสามารถในการฝังการควบคุมและ / หรือการเปลี่ยนแปลงของการไหลของข้อมูลลงในข้อเสนอ / ประเภทที่โปรแกรมกำหนดไว้เพื่อพิสูจน์: (ด้วยความหลากหลาย, ประเภทตระกูล, GADT เป็นต้น)
- ความสมบูรณ์ของ Referential
ไม่มีสิ่งใดที่เป็นเอกลักษณ์ของ Haskell (ความคิดเหล่านี้ส่วนใหญ่แก่แล้วอย่างไม่น่าเชื่อ ) อย่างไรก็ตามเมื่อรวมเข้ากับชุดของ abstractions ในไลบรารีมาตรฐาน (มักพบในคลาสชนิด), sugaring ระดับไวยากรณ์ต่าง ๆ และความมุ่งมั่นอย่างเข้มงวดเพื่อความบริสุทธิ์ในการออกแบบโปรแกรมเราท้ายด้วยภาษาที่จัดการอย่างใดอย่างหนึ่งเพื่อทั้งสองอย่าง มีประโยชน์เพียงพอสำหรับการใช้งานในโลกแห่งความเป็นจริงแต่ในขณะเดียวกันก็พิสูจน์ได้ง่ายกว่าในเรื่องภาษาดั้งเดิมส่วนใหญ่
คำถามนี้ได้คำตอบที่ลึกพอสมควรและฉันไม่สามารถทำมันได้อย่างยุติธรรมในบริบทนี้ ฉันขอแนะนำให้อ่านเพิ่มเติมเกี่ยวกับวิกิพีเดีย / ในวรรณคดี:
* หมายเหตุ: ฉันกำลังคัดค้าน / เพิกเฉยต่อแง่มุมที่ซับซ้อนของสิ่งสกปรกของ Haskell (ข้อยกเว้นการไม่เลิก ฯลฯ ) ซึ่งจะทำให้การโต้แย้งซับซ้อนเท่านั้น