30
เดี๋ยวก่อนนี่คือภาษาอะไร
เมื่อเร็ว ๆ นี้ฉันมีความสุขในการเขียนโปรแกรม Haskell ที่สามารถตรวจจับได้ว่าNegativeLiteralsส่วนขยายนั้นทำงานหรือไม่ ฉันมากับสิ่งต่อไปนี้: data B=B{u::Integer} instance Num B where{fromInteger=B;negate _=B 1} main=print$1==u(-1) ลองออนไลน์! สิ่งนี้จะพิมพ์TrueตามปกติและFalseอย่างอื่น ตอนนี้ฉันสนุกมากที่ได้ทำสิ่งนี้ฉันกำลังขยายความท้าทายให้กับทุกคน ส่วนขยายภาษา Haskell อื่น ๆ ที่คุณสามารถถอดรหัสได้ กฎระเบียบ จะแตกเป็นส่วนขยายของภาษาโดยเฉพาะอย่างยิ่งคุณต้องเขียนโปรแกรม Haskell ที่รวบรวมทั้งที่มีและไม่มีนามสกุลภาษา (คำเตือนจะมีการปรับ) และผลแตกต่างกันสองไม่ใช่ข้อผิดพลาดค่าทำงานเมื่อมีนามสกุลภาษาและมันปิด (โดยการเพิ่มNoคำนำหน้า ส่วนขยายภาษา) ด้วยวิธีนี้รหัสข้างต้นอาจย่อให้เหลือเพียง: data B=B{u::Integer} instance Num B where{fromInteger=B;negate _=B 1} main=print$u(-1) ซึ่งพิมพ์1และ-1. วิธีใดก็ตามที่คุณใช้ในการถอดรหัสส่วนขยายจะต้องเฉพาะกับส่วนขยายนั้น อาจมีวิธีที่จะตรวจจับการตั้งค่าสถานะของคอมไพเลอร์หรือ LanguageExtensions ที่เปิดใช้งานโดยพลการหากวิธีการดังกล่าวไม่ได้รับอนุญาต คุณสามารถเปิดใช้งานส่วนขยายภาษาเพิ่มเติมหรือเปลี่ยนการเพิ่มประสิทธิภาพของคอมไพเลอร์โดย-Oไม่ต้องเสียค่าใช้จ่ายนับไบต์ ส่วนขยายภาษา คุณไม่สามารถแตกนามสกุลภาษาใด ๆ …