return-type- (only)-Polymorphism ใน Haskell เป็นสิ่งที่ดีหรือไม่?
สิ่งหนึ่งที่ฉันไม่เคยคิดมาก่อนใน Haskell คือวิธีที่คุณสามารถมีค่าคงที่แบบ polymorphic และฟังก์ชั่นที่ประเภทการคืนค่าไม่สามารถกำหนดได้ตามประเภทอินพุตของพวกเขาเช่น class Foo a where foo::Int -> a บางเหตุผลที่ฉันไม่ชอบสิ่งนี้: ความโปร่งใสอ้างอิง: "ใน Haskell เมื่อได้รับอินพุตเดียวกันฟังก์ชั่นจะส่งคืนเอาต์พุตเดียวกันเสมอ" แต่นั่นเป็นเรื่องจริงหรือ read "3"return 3 เมื่อใช้ในIntบริบท แต่ส่งข้อผิดพลาดเมื่อใช้ใน a, say, (Int,Int)context ใช่คุณสามารถโต้แย้งได้ว่าreadการรับพารามิเตอร์ประเภท แต่ความนัยของพารามิเตอร์ประเภททำให้ความงามของมันหายไปในความคิดของฉัน ข้อ จำกัด monomorphism: หนึ่งในสิ่งที่น่ารำคาญที่สุดเกี่ยวกับ Haskell แก้ไขให้ฉันถ้าฉันผิด แต่เหตุผลทั้งหมดสำหรับ MR คือการคำนวณที่มีลักษณะที่ใช้ร่วมกันอาจไม่ใช่เพราะพารามิเตอร์ type เป็นนัย ประเภทการเริ่มต้น: อีกสิ่งหนึ่งที่น่ารำคาญที่สุดเกี่ยวกับ Haskell เกิดขึ้นเช่นถ้าคุณส่งผลลัพธ์ของฟังก์ชัน polymorphic ในผลลัพธ์ไปยังฟังก์ชัน polymorphic ในอินพุต อีกครั้งแก้ไขให้ฉันถ้าฉันผิด แต่สิ่งนี้จะไม่จำเป็นหากไม่มีฟังก์ชันที่ชนิดของการส่งคืนไม่สามารถกำหนดได้ตามประเภทอินพุต (และค่าคงที่แบบ …