Haskell ภาษาโปรแกรมเชิงฟังก์ชันที่ทรงพลังและบริสุทธิ์
สรุปใจความสำคัญ
- Haskell เป็นภาษาเชิงฟังก์ชันบริสุทธิ์ (Purely Functional) ซึ่งหมายความว่าฟังก์ชันไม่มี side effects
- ใช้ระบบ Lazy Evaluation ซึ่งจะคำนวณค่าของนิพจน์เฉพาะเมื่อจำเป็นต้องใช้เท่านั้น
- มีระบบ Type Inference ที่ทรงพลัง ทำให้ผู้เขียนโปรแกรมไม่ต้องระบุประเภทข้อมูลในทุกจุด
Haskell (/ˈhæskəl/) เป็นภาษาโปรแกรมแบบ general-purpose, statically typed และเป็นภาษาเชิงฟังก์ชันบริสุทธิ์ (purely functional) ที่มีคุณสมบัติเด่นคือ type inference และ lazy evaluation โดย Haskell ได้บุกเบิกฟีเจอร์สำคัญหลายอย่าง เช่น type classes สำหรับการทำ operator overloading ที่ปลอดภัยต่อประเภทข้อมูล และ monadic input/output (IO) เพื่อจัดการกับผลกระทบข้างเคียง (side effects) ภาษาชื่อนี้ตั้งตามชื่อของนักตรรกศาสตร์ Haskell Curry และมีการนำไปใช้งานจริงผ่านคอมไพเลอร์หลักอย่าง Glasgow Haskell Compiler (GHC)
ประวัติความเป็นมา
หลังจากการเปิดตัวภาษา Miranda ในปี 1985 ความสนใจในภาษาเชิงฟังก์ชันแบบ lazy functional languages ได้เพิ่มขึ้นอย่างมาก โดยในปี 1987 มีภาษาในกลุ่มนี้มากกว่าสิบภาษาเกิดขึ้น แต่เนื่องจาก Miranda เป็นซอฟต์แวร์แบบ proprietary (มีลิขสิทธิ์) จึงเกิดความต้องการมาตรฐานเปิดสำหรับภาษาประเภทนี้
การพัฒนา Haskell 1.0 ถึง 1.4
Haskell ถูกพัฒนาโดยคณะกรรมการที่พยายามรวบรวมโซลูชันที่มีอยู่ให้กลายเป็นมาตรฐานเดียว โดยมีจุดเริ่มต้นที่สำคัญดังนี้:
- Type Classes: ถูกเสนอโดย Philip Wadler และ Stephen Blott เพื่อจัดการกับความเท่ากันของประเภทข้อมูลและการทำ arithmetic overloading
- Monadic IO: ในเวอร์ชัน 1.3 ได้มีการนำ monadic IO และการขยาย type classes ไปยัง higher kinds มาใช้ พร้อมกับ "do notation" ซึ่งช่วยให้การเขียนโปรแกรมแบบลำดับขั้นตอนดูง่ายขึ้นในขณะที่ยังคงรักษา referential transparency ไว้ได้
- Sequential Evaluation: มีการย้ายการทำงานของ
seqจาก type class ไปเป็นฟังก์ชันมาตรฐานเพื่อความสะดวกในการปรับปรุงโค้ด

Haskell 98 และ Haskell 2010
ในปี 1997 ได้มีการกำหนดมาตรฐาน Haskell 98 เพื่อให้เป็นเวอร์ชันที่เสถียรและพกพาสะดวก เหมาะสำหรับการสอนและการเป็นฐานสำหรับการต่อยอดในอนาคต
ต่อมาในปี 2006 ได้เริ่มกระบวนการสร้างมาตรฐาน Haskell 2010 ซึ่งเป็นการปรับปรุงจาก Haskell 98 โดยมีการเพิ่มฟีเจอร์สำคัญ เช่น:
- Hierarchical Module Names: การตั้งชื่อโมดูลแบบลำดับชั้น (เช่น
Data.List) - Foreign Function Interface (FFI): การเชื่อมต่อกับภาษาโปรแกรมอื่น (โดยเฉพาะภาษา C)
- การปรับปรุง Type Inference: ผ่อนปรนกฎการอนุมานประเภทข้อมูลเพื่อให้โปรแกรมตรวจสอบประเภทข้อมูลได้ง่ายขึ้น
- LANGUAGE Pragma: การกำหนดส่วนขยายของภาษาผ่าน pragma เพื่อให้ผู้ใช้สามารถเลือกใช้ฟีเจอร์ทดลองได้
คำถามที่พบบ่อย
Haskell คืออะไร?
Haskell เป็นภาษาโปรแกรมเชิงฟังก์ชันแบบ statically typed ที่เน้นความบริสุทธิ์ (purity) และใช้การประเมินค่าแบบ lazy evaluation
GHC คืออะไร?
GHC ย่อมาจาก Glasgow Haskell Compiler ซึ่งเป็นคอมไพเลอร์หลักที่ใช้ในการพัฒนาและรันโปรแกรมภาษา Haskell ในปัจจุบัน
Monad ใน Haskell คืออะไร?
Monad เป็นโครงสร้างที่ใช้จัดการกับผลกระทบข้างเคียง (side effects) เช่น การรับค่าจากคีย์บอร์ดหรือการพิมพ์ค่าออกทางหน้าจอ โดยที่ยังคงรักษาคุณสมบัติความเป็นฟังก์ชันบริสุทธิ์ไว้ได้
