ดูเหมือนว่าอินสแตนซ์ที่ถูกผูกมัดใด ๆ ควรมีการนำ Enum ไปปฏิบัติอย่างมีสติ ฉันไม่สามารถคิดตัวอย่างแบบส่วนตัวได้แม้ว่าจะมีบางคนที่มากับคนที่ไม่ใช่พยาธิวิทยาฉันก็จะเข้าใจว่าทำไมมันถึงไม่เป็นเช่นนั้น
จากการทำ:i
สองประเภทของคลาสดูเหมือนว่าข้อยกเว้นเพียงอย่างเดียวในปัจจุบันในไลบรารีมาตรฐานคือสำหรับสิ่งอันดับซึ่งถูกผูกไว้ แต่ไม่ใช่ Enums อย่างไรก็ตาม tuple ที่ถูกผูกไว้ใด ๆ จะต้องนับจำนวนด้วยวิธีการที่มีสติด้วยการเพิ่มองค์ประกอบสุดท้ายจากนั้นล้อมรอบเมื่อมันไปถึง maxBound
การเปลี่ยนแปลงนี้อาจเกี่ยวข้องกับการเพิ่มpredB
และ / nextB
หรือสิ่งที่คล้ายกันเพื่อ จำกัด สำหรับวิธีที่ปลอดภัย / วนรอบเพื่อสำรวจผ่านค่า Enum ในกรณีนี้toEnum 0 :: (...)
จะเท่ากับ(toEnum 0, toEnum 0, ...) :: (...)
Double
/ Float
และทุกประเภทที่คล้ายกันดำเนินการEnum
ต่อไปพวกเขาก็ให้และsucc = (+ 1)
fromEnum = truncate
จริง ๆ แล้ววิธีการของ Haskell ทำให้เข้าใจได้จากมุมมองที่เป็นประโยชน์เช่นเดียวกับ [0, 0.5 .. ] และสิ่งที่คล้ายกันก็ใช้งานไม่ได้ดังนั้น Haskell จึงไม่ต้องกังวลเกี่ยวกับความสามารถในการนับเมื่อมาถึง Enums
succ
(+1)
นั่นคือแปลกเพราะDouble
และFloat
ไม่ได้มีความแม่นยำที่ไม่มีที่สิ้นสุดและทำให้มีนับ - succ
จะได้รับการกำหนดให้เป็น 1 ULP