แหล่ง Haskell ที่ดีในการอ่านและเรียนรู้จาก [ปิด]


347

โปรแกรมโอเพ่นซอร์สอะไรบ้างที่ใช้ Haskell และถือได้ว่าเป็นHaskell สมัยใหม่ที่มีคุณภาพดี ? ยิ่งรหัสฐานใหญ่ขึ้นเท่าไหร่ก็ยิ่งดีเท่านั้น

ฉันต้องการเรียนรู้จากซอร์สโค้ดของพวกเขา ฉันรู้สึกว่าฉันผ่านจุดเรียนรู้จากตัวอย่างโค้ดขนาดเล็กซึ่งมักจะเป็นเรื่องลึกลับและโลกใบเล็ก ฉันต้องการดูว่ามีการจัดโครงสร้างโค้ดอย่างไรบ้าง Monads โต้ตอบอย่างไรเมื่อคุณมีหลายสิ่งหลายอย่างเกิดขึ้น (การบันทึก I / O การกำหนดค่า ฯลฯ )


9
แม้ว่าคำถามนี้จะถูกปิด แต่ผู้ใช้ยังสามารถแก้ไขคำตอบที่ 'ยอมรับ' และเพิ่มคำตอบของพวกเขา
George Stocker

คำตอบ:


276

สิ่งที่ฉันแนะนำ

อ่านรหัสโดยผู้คนจากโรงเรียนต่าง ๆ ในปี 1990

อ่านรหัสโดยเจ้านายเก่าบางคน (รายการที่ไม่สมบูรณ์)

โปรดทราบว่าคนอย่างฉัน Coutts, Mitchell, O'Sullivan, Lynagh และอื่น ๆ ได้เรียนรู้สไตล์ Haskell ของเราจากคนเหล่านี้

อ่านบางแอพพลิเคชั่น


98
นี่เป็นเรื่องปกติที่มีฮาเซล ด้วย php คุณจะอ่านคำว่าสวัสดีและตรงไปที่การเขียนเว็บไซต์ที่ไม่ดี ด้วย Haskell ไม่มีสิ่งใดที่คุณสามารถเรียนรู้ได้มีส่วนขยายและเอกสารที่น่าสนใจขึ้นมาเสมอ และตอนนี้ฉันได้เรียนรู้ว่ามหาวิทยาลัยมีสไตล์ที่แตกต่างกันดังนั้นฉันต้องตรวจสอบสิ่งเหล่านั้นทั้งหมด ... ฉันจะมีเวลาสำหรับการเขียนโครงการของตัวเองเมื่อไหร่? :)
Tarrasch

39
อะไรคือคุณสมบัติของสไตล์ที่แตกต่างกันคร่าวๆ?
grautur

17
@grautur: และที่สำคัญกว่านั้นคือทำไมพวกเขาถึงแตกต่างกัน? มีเหตุผลทางเทคนิคที่ดีหรือไม่?
Robert Massaioli

10
ในมุมมองของฉันสไตล์ที่แตกต่างเป็นผลมาจากการแยกทางภูมิศาสตร์ (และบางครั้งความขัดแย้งทางปรัชญา) ของโรงเรียนต่าง ๆ ในยุคก่อนวิกิ / อินเทอร์เน็ต และมรดกของภาษาโปรโต - แฮสเคลล์ในแต่ละโรงเรียนที่มีอิทธิพลต่อรูปแบบ ด้วยการเกิดขึ้นของ Hackage, wikis และ github ทำให้ตอนนี้มีสไตล์ Haskell ที่เป็นเนื้อเดียวกัน (ขึ้นอยู่กับการใช้งานของ Glasgow และ GHC)
Don Stewart

15
ที่ CMU ฉันได้เรียนรู้ความหมายเชิง Denotational และการได้มาของโปรแกรม (การเปลี่ยนแปลงข้อกำหนดของการใช้งานอย่างเป็นระบบ) ซึ่งทั้งสองอย่างนี้มีผลกระทบอย่างลึกซึ้งต่อวิธีการเขียนโปรแกรมของฉัน คุณจะเห็นทั้งสองรูปแบบเป็นประจำในบล็อกของฉัน เมื่อฉันทำงานในห้องสมุดซอฟต์แวร์ฉันเลือกประเภทเล็ก ๆ และเริ่มต้นด้วยคำถามกลาง: "มันหมายความว่าอะไร?" เมื่อฉันเห็นรหัสระดับต่ำเช่นความจำเป็น / IOฉันถาม "สิ่งที่เป็นนามธรรมแบบ denotative คือการใช้งานและวิธีการที่จะได้รับมาจากสิ่งที่เป็นนามธรรม?"
Conal

61

XMonadเป็นแหล่งเปิดตัวจัดการหน้าต่างปูกระเบื้องเดิมถ่ายแบบอย่างอิสระบนdwm มีส่วนขยายจำนวนมากคุณภาพแตกต่างกัน แต่แกนกลางมีขนาดกะทัดรัดและจัดระเบียบได้ดี


37
แกนกลาง, fwiw, ยังได้รับการออกแบบอย่างระมัดระวัง แกนหลักของ StackSet ได้รับการตรวจสอบ (นั่นคือคุณสมบัติ QC) ใน Proq theorem prover มันเป็นตัวอย่างของการดูแลการออกแบบทางพยาธิวิทยา
Don Stewart

7
@don: "พยาธิวิทยา" เช่นเดียวกับใน "ดี" ใช่ไหม? :)
Francesco

8
ใช่ :-) สเปนเซอร์และฉันให้ความสำคัญกับการสร้างแกน xmonad มากกว่าโครงการใด ๆ ที่ฉันเคยมีส่วนร่วม
ดอนสจ๊วต

18
  1. Haskell: Functional Programming with Types

    Joeri van Eekelen และคณะ | Wikibooks ตีพิมพ์ในปี 2550 หน้า 290

  2. Learn You a Haskell for Great Good!

    Miran Lipovaca | LearnYouaHaskell.com เผยแพร่ในปี 2010 จำนวน 176 หน้า

  3. Real World Haskell

    B. O'Sullivan, J. Goerzen, D. Stewart | O'Reilly Media, Inc. จัดพิมพ์เมื่อปี 2551 หน้า 710

  4. The Haskell Road to Logic, Maths and Programming

    Kees Doets, Jan van Eijck | สิ่งพิมพ์วิทยาลัยตีพิมพ์ในปี 2004 หน้า 449


6
นี่คือหนังสือไม่ใช่ไฟล์ต้นฉบับของโครงการจริง
ses

17

Darcsเป็นโอเพ่นซอร์สระบบการจัดการรหัสต้นฉบับ มันควรจะเป็นแนวคิดที่ดีสำหรับ Haskell


16
เมื่อทำงานกับบิตที่เป็นธรรมฉันก็จะไม่แนะนำซอร์สโค้ดของมัน ไม่ได้ใช้สิ่งที่ฉันจะพิจารณารูปแบบที่ดี Haskell ฉันเดาว่าถ้าคุณอยากรู้ว่าเกิดอะไรขึ้นเมื่อฐานโค้ดขนาดเล็กมีขนาดใหญ่ขึ้นในขณะที่เติบโตแบบออแกนิกแล้วมันก็เป็นตัวอย่างที่ดี หากคุณต้องการดูโปรแกรมที่มีสไตล์การเขียนที่สอดคล้องกันหรือเป้าหมายการออกแบบที่ชัดเจนฉันจะมองที่อื่น
Jason Dagit



5

GHC อาจเป็นโครงการที่ใหญ่ที่สุดหรือใหญ่ที่สุดโครงการหนึ่งที่เขียนใน Haskell ซึ่งเป็นโอเพ่นซอร์ส เมื่อฉันพูดมากที่สุดฉันไม่ได้หมายถึงเฉพาะในแง่ของขนาดแหล่งที่มา แต่ยังส่งผลกระทบต่อการใช้นวัตกรรมความแข็งแกร่ง GHC สามารถสอนคุณได้มากมายเกี่ยวกับการเขียน Haskell

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