- 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