คณิตศาสตร์จำเป็นต้องเข้าใจทฤษฎีเบื้องหลังระบบการพิมพ์ของ Haskell หรือไม่?


9

เมื่อเร็ว ๆ นี้ฉันสนใจ Haskell เป็นอย่างมาก

ในขณะที่พยายามที่จะเรียนรู้แนวคิดใหม่ (เช่นคำหลัก forallและST monad ) และระบบการพิมพ์ของ Haskell โดยทั่วไปผมทำงานอย่างต่อเนื่องเข้าสู่แนวคิดจากทฤษฎีหมวดหมู่และแลมบ์ดาแคลคูลัส ดังนั้นฉันสงสัยว่า:

  1. สาขาคณิตศาสตร์อื่น ๆ มีความสำคัญต่อความเข้าใจที่แข็งแกร่งของระบบประเภทของ Haskell

  2. ฉันสามารถสละการศึกษาคณิตศาสตร์เหล่านี้อย่างจริงจังและให้ความสนใจกับแนวคิดที่เกี่ยวข้องได้หรือไม่? (เช่นปริมาณในแคลคูลัสแลมบ์ดา) ถ้าเป็นเช่นนั้นแนวคิดใดที่จำเป็น?

ฉันหวังว่าจะได้รับประเภทและภาษาการเขียนโปรแกรมในเร็ว ๆ นี้โปรดแนะนำแหล่งข้อมูลการอ่านอื่น ๆ ที่คุณรู้สึกว่าเหมาะสม


4
สิ่งทฤษฎีหมวดหมู่ไม่จำเป็นต้องรู้และทำงานกับ Haskell แต่มันสามารถช่วยให้มีแนวคิดพื้นฐานบางอย่าง สาขาคณิตศาสตร์ที่แท้จริงเท่านั้นที่จะเข้าใจสิ่งนี้จากคือสิ่งที่หมวดหมู่ทฤษฎีมันไม่เพียง แต่หยั่งรากไปที่นั่น แต่ในนั้นคุณจะพบว่าต้องพึ่งพาคณิตศาสตร์ตัวอื่นเพียงเล็กน้อย รับแคลคูลัสแลมบ์ดาและศึกษาระบบประเภทต่าง ๆ ที่เกี่ยวข้องกับแลมบ์ดาตัวแปรต่างๆและอื่น ๆ นอกเหนือจากนั้นอ่านคำตอบ SO นี้และอ่านเกี่ยวกับทฤษฎีหมวดหมู่
Jimmy Hoffa

3
ฉันจะไม่จมอยู่กับการเรียนรู้ระบบการพิมพ์พื้นฐาน อย่างน้อยอย่าปล่อยให้ไม่รู้ว่าทุกอย่างหยุดคุณไม่ให้ทำโครงการสองสามอย่าง เพียงแค่ทำโปรเจกต์ง่ายๆใน Haskell ให้ฉันได้เห็นความงามทางคณิตศาสตร์ที่อยู่ข้างหลังและทำให้ฉันเข้าใจมัน
ChaosPandion

2
@ChaosPandion ฉันเห็นด้วยกับมุมมองนั้น แต่ฉันได้ทำงานในโครงการที่อาจต้องใช้รหัสในการเขียนSTmonad มันเป็นการยากที่จะเขียนโค้ดที่จะรวบรวมเมื่อฉันไม่เข้าใจลายเซ็นประเภทที่เกี่ยวข้องทั้งหมดดังนั้นฉันจึงรู้สึกว่าการปรับปรุงความเข้าใจของฉันเกี่ยวกับระบบพิมพ์จะต้องรอบคอบ
Rob

3
@robjb - ฉันเห็นด้วยอย่างแน่นอนกับคุณว่าความเข้าใจที่ลึกซึ้งยิ่งขึ้นนั้นเป็นสิ่งที่รอบคอบ ความคิดเห็นของฉันตรงไปตรงมามากขึ้นที่ผู้ชมทั่วไปที่อาจพบว่า Haskell ข่มขู่เกินกว่าที่จะลอง
ChaosPandion

คำตอบ:


11

ไม่คุณไม่จำเป็นต้องรับหนังสือเกี่ยวกับทฤษฎีหมวดหมู่เพื่อทำความเข้าใจ Haskell

ฉันใช้ Haskell มาสองสามปีแล้วและหยิบทฤษฎีหมวดหมู่ขึ้นมาจากความอยากรู้อยากเห็นมันไม่จำเป็นจริงๆ ในมือข้างหนึ่งมันเจ๋งที่เห็นว่า abstractions เหล่านี้เข้ากับ "ภาพใหญ่" แต่ฉันไม่ได้ไป "โอ้ฉันพุทโธ่ฉันแค่ต้องทำให้ศาสตราจารย์คนนี้จากMaybeหมวดหมู่เป็น[]s แล้วฉันสามารถบันทึก เจ้าหญิง!"

ตอนนี้ขึ้นอยู่กับสิ่งที่คุณทำกับทฤษฎีประเภท Haskell อยู่บนรั้ว

หากคุณเพียงแค่การเรียนรู้ Haskell ไม่ได้ไปพยายามที่จะเข้าใจความแตกต่างของระบบการพิมพ์ทุก กรุณาอย่ามันเหมือนกับการพยายามเรียนรู้การเขียนโปรแกรมแม่แบบ C ++ ก่อน ประเภทแฟนซีเป็นเครื่องมือที่ยอดเยี่ยม แต่มีความเข้าใจที่ดีของการเขียนโปรแกรมการทำงานทำความเข้าใจความแตกต่าง impredicative

ทีนี้สมมุติว่าหลังจากหนึ่งปีหรือสองปีของ Haskell คุณกำลังมองหาที่จะเข้าใจว่าระบบการพิมพ์ของ Haskell ทำงานได้ดีแค่ไหนใช่แล้วทฤษฎีการพิมพ์บางอย่างอาจมีประโยชน์

มันจะช่วยให้คุณเข้าใจตรรกะบางอย่างที่อยู่เบื้องหลังการทำงานของสิ่งต่าง ๆ รวมถึงมันเป็นสาขาวิทยาศาสตร์คอมพิวเตอร์ IMO ที่เจ๋งจริงๆที่ควรค่าแก่การดู คุณสามารถเลือกชิ้นส่วนที่คุณสนใจและยังเรียนรู้ในปริมาณที่เหมาะสม

สำหรับ Haskell ให้ดูที่ STLC, HM type systems (System F) และบางที lambda cube (Haskell คือ System Fw iirc) และ iso-recursive ประเภทและภาษาการเขียนโปรแกรมเป็นแหล่งข้อมูลชั้นเยี่ยมสำหรับการเริ่มต้นและครอบคลุมสิ่งเหล่านี้และอื่น ๆ อีกมากมาย

หากคุณต้องการดื่มเครื่องดื่มสุดเจ๋งและค้นพบว่าคุณเป็นนักทฤษฎีประเภทรุ่นให้ไปที่ Agda หรือ Coq ฟีเจอร์เหล่านี้ "ประเภทที่ต้องพึ่งพา" ซึ่งอยู่ห่างออกไปหนึ่งก้าวในลูกบาศก์แลมบ์ดากว่าแฮสเคลล์ ประเภทขึ้นอยู่กับให้ประเภทขึ้นอยู่กับเงื่อนไข นี่หมายความว่าประเภทนั้นมีพลังมากพอที่จะพิสูจน์ทฤษฎีบทได้ สำหรับผู้ที่อยากรู้อยากเห็น googling "แกงโฮเวิร์ดมอร์ฟมอร์ฟิซึ่ม" ควรนำผลลัพธ์ที่น่าสนใจมาให้


คำอธิบายสั้น ๆ ของ Agda และ Coq จะเป็นประโยชน์
ChaosPandion

@ChaosPandion อัปเดต
Daniel Gratzer

นั่นดูดีนะ ฉันคิดเพียงแค่พูดชื่อไม่เพียงพอที่จะทำให้งงงวยความสนใจของคนจำนวนมาก
ChaosPandion
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.