เมื่อเร็ว ๆ นี้ฉันมีความสุขในการเขียนโปรแกรม 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
ไม่ต้องเสียค่าใช้จ่ายนับไบต์
ส่วนขยายภาษา
คุณไม่สามารถแตกนามสกุลภาษาใด ๆ ที่ไม่ได้มีNo
คู่ (เช่นHaskell98
, Haskell2010
, Unsafe
, Trustworthy
, Safe
) เพราะสิ่งเหล่านี้ไม่ตกอยู่ภายใต้เงื่อนไขที่ระบุไว้ข้างต้น ส่วนขยายภาษาอื่น ๆ เป็นเกมที่ยุติธรรม
เกณฑ์การให้คะแนน
คุณจะได้รับรางวัลหนึ่งคะแนนสำหรับทุกส่วนขยายภาษาที่คุณเป็นคนแรกที่จะถอดรหัสและอีกหนึ่งจุดเพิ่มเติมสำหรับทุก ๆ ส่วนขยายของภาษาที่คุณมีรอยแตกสั้นที่สุด (วัดเป็นไบต์) สำหรับจุดที่สองความสัมพันธ์จะถูกทำลายในความโปรดปรานของการส่งก่อนหน้านี้ คะแนนที่สูงขึ้นจะดีกว่า
คุณจะไม่สามารถทำคะแนนสำหรับการส่งครั้งแรกในNegativeLiterals
หรือQuasiQuotes
เพราะฉันได้แตกพวกเขาและรวมไว้ในเนื้อหาของโพสต์ อย่างไรก็ตามคุณจะสามารถทำคะแนนให้กับรอยแตกที่สั้นที่สุดของแต่ละจุดได้ นี่คือรอยแตกของฉันQuasiQuotes
import Text.Heredoc
main=print[here|here<-""] -- |]
NondecreasingIndentation
เหตุผลที่ชัดเจน
Wait, what language extension is this?
หรือสิ่งที่แตกต่างอย่างสิ้นเชิง
RelaxedPolyRec
สำหรับคอมไพเลอร์พอโบราณจริงสนับสนุนเปิดออก (ตัวเลือกแขวนอยู่กับเอกสารหลายปีหลังจากที่มันหยุดทำอะไร)