Rust Generic vs Haskell Parametric Polymorphism (Part 2 : Generic Data Type)

ตอนที่แล้ว เปรียบเทียบ Generic Function คราวนี้มาดูกรณีการสร้าง Data Type ใหม่ โดยองค์ประกอบของ Type นั้นมีส่วนที่เป็น Generic อยู่กันบ้าง

สำหรับ Haskell จะใช้ keyword data สร้างทั้งข้อมูลแบบ Product Type และ Sum Type ซึ่ง Product Type ของ Haskell ก็เทียบเคียงได้กับ struct ของ Rust ส่วน Sum Type ก็เทียบเคียงได้กับ Enum ของ Rust นั่นเอง ไปดูตัวอย่างโค้ดกันเลยดีกว่า

Haskell Sum Type

data Option t = None | Some t

Rust Enum

enum Option<T> {
None,
Some(T),
}

จะเห็นว่าคล้ายกันมาก Haskell ใช้ keyword ว่า data ส่วน Rust ใช้ enum, Haskell กำหนด type variables หลังชื่อ data type โดยที่ไม่ต้องอยู่ภายใน <> แต่ Rust ต้องกำหนดภายใน <> และเป็นตัวใหญ่, Haskell ใช้ | คั่นละหว่างแต่ละค่าที่เป็นไปได้ ส่วน Rust ใช้ , คั่น

Haskell Product Type

data Pair t = Pair {firstVal :: t , secondVal :: t}

Rust Struct

struct Pair<T> {
first_val: T,
second_val: T,
}

ในกรณี Product Type กับ Struct นี่คล้ายกันมาก (ป.ล Haskell เขียน Product Type ได้อีกแบบ แต่ผมเลือกแบบ Record Syntax เพื่อให้เหมือน struct field ของ Rust) ไม่ต่างกับตรง Sum Type เช่นกัน

สรุปจากทั้งสองตอน พอเปรียบเทียบกับ Haskell ทำให้ผมไม่กลัว syntax Generic ของ Rust อีกแล้วครับ