- type class ลำดับชั้นของตัวแปรที่บ่งบอกความสัมพันธ์กับฟังก์ชันต่างๆ
- type ชนิดของตัวแปร โดยตัวแปรชนิดนึงสามารถมีได้หลาย class
ซึ่งตัวเลขใน Haskell สามารถจัดแบ่งคร่าวๆ ได้ดังนี้
- ตัวเลข class:
Num - จำนวนเต็ม class:
Integral - type:
Intจำนวนเต็มตามขนาด word ของคอมพิวเตอร์ - type:
Integerจำนวนเต็มในอุดมคติ ไม่มีขอบเขตบน/ล่าง - ทศนิยม class:
Floating,Fractional
และเราสามารถตรวจสอบ type ได้โดยใช้ command
:t (หรือเต็มๆ คือ :type) แล้วตามด้วยตัวแปร เช่นtype class พร้อมตัวแปรที่ใช้แสดงแทนนั้น จะถูกบอกไว้ก่อนเครื่องหมาย
=> ส่วนอีกด้านจะบอก type ของตัวแปร ซึ่งในกรณีที่เราไม่ได้เจาะจง type ลงไปเช่นนี้ Haskell จะจัดมันไว้ใน type class ที่ใหญ่ที่สุดไว้ก่อน เพื่อที่ว่าถ้าดำเนินการกับ type class ที่เป็นลูกหลานของมันจะยังให้ผลลัพท์ที่ถูกต้องส่วนการประกาศ type แบบเจาะจงก็ทำได้โดยใส่ 2 colon แล้วตามด้วย type ไว้ข้างหลังตัวแปรนั้น
จะเห็นว่าคราวนี้ไม่มีการบอก type class กับ
=> แล้ว เพราะเรารู้ type ที่แน่นอนของมันนั่นเองอย่างที่บอกไว้แต่ต้น การดำเนินการข้าม type หรือ type class ที่ไม่เกี่ยวข้องกันนั้น ไม่สามารถทำได้ใน Haskell เช่น error ในตัวอย่างนี้
เลขทั้งสองตัวนั้นก็ต่างอยู่ใน type class
Integral เหมือนกัน แต่เมื่อถูกกำหนดโดย type ต่างกัน จะทำให้ไม่สามารถนำมาบวกกันได้ทางออกคือ
- จำนวนเต็มสามารถใช้ฟังก์ชัน
fromIntegralเพื่อเปลี่ยน type class กลับไปเป็นNumก่อนเอาไปคำนวณต่อ - ทศนิยมใช้ฟังก์ชัน
truncate(ปัดทิ้ง),floor(ปัดลง),ceiling(ปัดขึ้น),round(ปัดครึ่ง) เพื่อเปลี่ยน type class เป็นIntegralได้
No comments:
Post a Comment