คำถามติดแท็ก haskell

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

1
ตอนนี้ Haskell โลกแห่งความจริงส่วนใดล้าสมัยหรือถือว่าเป็นการปฏิบัติที่ไม่ดี
ในบทที่ 19 ของReal World Haskellหลายตัวอย่างตอนนี้ล้มเหลวเนื่องจากการเปลี่ยนแปลงของControl.Exception. นั่นทำให้ฉันคิดว่าบางสิ่งในหนังสือเล่มนี้อาจล้าสมัยไปแล้วและไม่คุ้มที่จะศึกษาอีกต่อไปหลังจากนั้นก็เป็นเวลา 6 ปี ข้อมูลอ้างอิงอื่น ๆ ของฉันคือLearn You a Haskell For Great Goodแม้ว่าจะเป็นหนังสือที่ยอดเยี่ยม แต่ก็มีพื้นฐานมากกว่าเมื่อเทียบกับ RWH ใครที่เคยอ่านหนังสือมาก่อนช่วยแนะนำหน่อยได้ไหมว่าส่วนไหนที่ไม่เกี่ยวข้องอีกต่อไป โดยเฉพาะอย่างยิ่งบทในช่วงครึ่งหลังของหนังสือตัวอย่างเช่นหน่วยความจำธุรกรรมซอฟต์แวร์การเขียนโปรแกรมพร้อมกันการเขียนโปรแกรมซ็อกเก็ตเป็นต้น แก้ไข: เป็นเรื่องเกี่ยวกับฉบับของหนังสือที่ตีพิมพ์ในเดือนธันวาคม 2551 ซึ่งเป็นฉบับเดียวที่รู้จัก ณ วันนี้ (พ.ย. 2017)

5
รูปแบบการออกแบบตามหน้าที่ [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน4 ปีที่แล้ว ปรับปรุงคำถามนี้ มีสำนวนการใช้งานมากมาย: monads แอพพลิเคชั่นลูกศร ฯลฯ พวกเขาได้รับการบันทึกไว้ในบทความต่างๆ แต่น่าเสียดายที่ฉันไม่รู้จักหนังสือหรือบทความใด ๆ ที่พวกเขาสรุปไว้ในที่เดียว (มีTypeclassopediaแต่มีจำนวนมาก ของพื้นที่ที่ไม่ครอบคลุม) ใครช่วยแนะนำบทความ / หนังสือที่ครอบคลุมได้ดีในที่เดียวและเรื่องไหนที่โปรแกรมเมอร์ที่มีทักษะระดับกลางใน FP สามารถเข้าถึงได้


4
การบันทึกอัตโนมัติใน GHC Haskell เป็นอย่างไร
ฉันคิดไม่ออกว่าทำไม m1 จึงถูกบันทึกในขณะที่ m2 ไม่ได้อยู่ในสิ่งต่อไปนี้: m1 = ((filter odd [1..]) !!) m2 n = ((filter odd [1..]) !! n) m1 10,000000 ใช้เวลาประมาณ 1.5 วินาทีในการโทรครั้งแรกและเศษของการโทรครั้งต่อ ๆ ไป (น่าจะเป็นการแคชรายการ) ในขณะที่ m2 10,000000 จะใช้เวลาเท่ากันเสมอ (การสร้างรายการใหม่ด้วยการโทรแต่ละครั้ง) มีความคิดเกิดอะไรขึ้น? มีกฎง่ายๆว่า GHC จะบันทึกฟังก์ชันหรือไม่และเมื่อใด ขอบคุณ.
106 haskell  ghc  memoization 

2
Comonad typeclass ใน Haskell คืออะไร?
Comonad typeclass ใน Haskell คืออะไร? เช่นเดียวกับใน Comonad จากControl.Comonad ในแพ็คเกจ comonad (ยินดีต้อนรับคำอธิบายของแพ็คเกจอื่น ๆ ที่มีคลาสประเภท Comonad ด้วย) ผมเคยได้ยินเกี่ยวกับราง Comonad แต่ทั้งหมดที่ผมรู้เกี่ยวกับมันว่าจะให้extract :: w a -> aเรียงลำดับของขนานไป return :: a -> m aMonad คะแนนโบนัสสำหรับการสังเกตการใช้งาน Comonad แบบ "ชีวิตจริง" ในโค้ด "ของจริง"

2
ความละเอียดประเภทรูที่ผิดปกติ
ฉันเพิ่งค้นพบว่ารูประเภทที่รวมกับการจับคู่รูปแบบบนการพิสูจน์ให้ประสบการณ์ที่ดีเหมือน Agda ใน Haskell ตัวอย่างเช่น: {-# LANGUAGE DataKinds, PolyKinds, TypeFamilies, UndecidableInstances, GADTs, TypeOperators #-} data (==) :: k -> k -> * where Refl :: x == x sym :: a == b -> b == a sym Refl = Refl data Nat = Zero | Succ Nat data SNat …

3
การได้มาทำงานอย่างไรใน Haskell?
พีชคณิตประเภทข้อมูล (ADTs) ใน Haskell จะกลายเป็นกรณีของบางอย่างโดยอัตโนมัติ typeclasse s (เช่นShow,Eq) โดยสืบมาจากพวกเขา data Maybe a = Nothing | Just a deriving (Eq, Ord) คำถามของฉันคือวิธีการderivingทำงานเช่น Haskell รู้วิธีใช้ฟังก์ชันของคลาสประเภทที่ได้รับสำหรับ ADT ที่ได้รับมาได้อย่างไร นอกจากนี้เหตุใดจึงderivingจำกัด เฉพาะแว่นตาบางประเภทเท่านั้น เหตุใดฉันจึงไม่สามารถเขียนคลาสประเภทของตัวเองที่สามารถรับมาได้

3
Guards vs. if-then-else vs. cases ใน Haskell
ฉันมีฟังก์ชั่นสามอย่างที่ค้นหาองค์ประกอบที่ n ของรายการ: nthElement :: [a] -> Int -> Maybe a nthElement [] a = Nothing nthElement (x:xs) a | a <= 0 = Nothing | a == 1 = Just x | a > 1 = nthElement xs (a-1) nthElementIf :: [a] -> Int -> Maybe a nthElementIf [] …

8
Haskell, Lisp และ verbosity [ปิด]
ตามที่กล่าวมาในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบถาม & ตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจก่อให้เกิดการถกเถียงโต้แย้งการสำรวจความคิดเห็นหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงได้และอาจเปิดขึ้นมาใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อรับคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา สำหรับคนที่คุณมีประสบการณ์ทั้ง Haskell และ Lisp ฉันอยากรู้ว่า "น่าพอใจ" (ใช้คำที่น่ากลัว) อย่างไรการเขียนโค้ดใน Haskell vs. Lisp ภูมิหลังบางอย่าง: ตอนนี้ฉันกำลังเรียนรู้ Haskell โดยก่อนหน้านี้เคยทำงานร่วมกับ Scheme และ CL (และโจมตี Clojure เล็กน้อย) ตามเนื้อผ้าคุณอาจคิดว่าฉันเป็นแฟนตัวยงของภาษาแบบไดนามิกเนื่องจากมีความกระชับและรวดเร็ว ฉันตกหลุมรักมาโคร Lisp อย่างรวดเร็วเพราะมันเป็นอีกวิธีหนึ่งในการหลีกเลี่ยงความฟุ่มเฟื่อยและสำเร็จรูป ฉันพบว่า Haskell น่าสนใจอย่างไม่น่าเชื่อเนื่องจากกำลังแนะนำวิธีการเขียนโค้ดที่ฉันไม่รู้ว่ามีอยู่จริง แน่นอนว่ามีบางแง่มุมที่ดูเหมือนว่าจะช่วยในการบรรลุความคล่องตัวเช่นความสะดวกในการเขียนฟังก์ชันบางส่วน อย่างไรก็ตามฉันกังวลเล็กน้อยเกี่ยวกับการสูญเสียมาโคร Lisp (ฉันคิดว่าฉันสูญเสียมันไปความจริงจะบอกว่าฉันอาจยังไม่ได้เรียนรู้เกี่ยวกับพวกมัน?) และระบบการพิมพ์แบบคงที่ ใครก็ตามที่ได้ทำการเข้ารหัสในระดับที่เหมาะสมในทั้งสองโลกจะแสดงความคิดเห็นว่าประสบการณ์นั้นแตกต่างกันอย่างไรซึ่งคุณต้องการและหากกล่าวว่าความชอบเป็นสถานการณ์

4
เครื่องมือสำหรับวิเคราะห์ประสิทธิภาพของโปรแกรม Haskell
ขณะที่การแก้ปัญหาโครงการออยเลอร์ในการเรียนรู้ Haskell (ดังนั้นขณะนี้ฉันเริ่มต้นสมบูรณ์) ฉันมามากกว่าปัญหา 12 ฉันเขียนวิธีแก้ปัญหา (ไร้เดียงสา) นี้: --Get Number of Divisors of n numDivs :: Integer -> Integer numDivs n = toInteger $ length [ x | x<-[2.. ((n `quot` 2)+1)], n `rem` x == 0] + 2 --Generate a List of Triangular Values triaList :: [Integer] triaList = …

1
Haskell printf ทำงานอย่างไร
ความปลอดภัยของ Haskell ไม่เป็นสองรองใครในภาษาที่พิมพ์ขึ้นเอง แต่มีเวทมนตร์ลึก ๆ เกิดขึ้นกับText.Printfที่ดูเหมือนจะเป็นประเภทว่องไว > printf "%d\n" 3 3 > printf "%s %f %d" "foo" 3.3 3 foo 3.3 3 ความมหัศจรรย์ที่อยู่เบื้องหลังสิ่งนี้คืออะไร? วิธีสามารถText.Printf.printfฟังก์ชั่นใช้การขัดแย้ง variadic เช่นนี้หรือไม่ เทคนิคทั่วไปที่ใช้ในการอนุญาตให้มีอาร์กิวเมนต์ตัวแปรใน Haskell คืออะไรและทำงานอย่างไร (หมายเหตุด้านข้าง: ความปลอดภัยบางประเภทหายไปเมื่อใช้เทคนิคนี้) > :t printf "%d\n" "foo" printf "%d\n" "foo" :: (PrintfType ([Char] -> t)) => t

6
ฉันจะใช้การเขียนโปรแกรมเชิงฟังก์ชันในโลกแห่งความเป็นจริงได้อย่างไร? [ปิด]
ปิด . คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เน้นไปที่ปัญหาเดียวโดยแก้ไขโพสต์นี้เท่านั้นเท่านั้น ปิดให้บริการใน5 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ภาษาที่ใช้งานได้ดีเพราะหลีกเลี่ยงข้อบกพร่องโดยการกำจัดสถานะ แต่ยังเป็นเพราะสามารถขนานกันได้โดยอัตโนมัติสำหรับคุณโดยที่คุณไม่ต้องกังวลกับการนับเธรด ในฐานะนักพัฒนา Win32 ฉันสามารถใช้ Haskell สำหรับ dll ของแอปพลิเคชันของฉันได้หรือไม่? และถ้าฉันทำจะมีข้อได้เปรียบที่แท้จริงสำหรับฉันโดยอัตโนมัติหรือไม่? ถ้าเป็นเช่นนั้นอะไรที่ทำให้ฉันได้เปรียบคอมไพเลอร์นี้ F # ขนานฟังก์ชันที่คุณเขียนในหลายคอร์และซีพียูให้คุณโดยอัตโนมัติหรือไม่? คุณเคยเห็นจำนวนเธรดในตัวจัดการงานเพิ่มขึ้นหรือไม่? โดยทั่วไปคำถามของฉันคือฉันจะเริ่มใช้ Haskell ในทางปฏิบัติได้อย่างไรและฉันจะเห็นประโยชน์บางอย่างจริงหรือไม่ถ้าฉันทำ

3
มีวิธีทำให้ GHC มีข้อ จำกัด ประเภทคลาสของรูที่พิมพ์หรือไม่?
พฤติกรรมปัจจุบัน Prelude> show _ <interactive>:7:6: Found hole ‘_’ with type: a0 Where: ‘a0’ is an ambiguous type variable Relevant bindings include it :: String (bound at <interactive>:7:1) In the first argument of ‘show’, namely ‘_’ In the expression: show _ In an equation for ‘it’: it = show _ พฤติกรรมที่ต้องการ …
103 haskell  types  ghc 


4
ขั้นตอนการทดสอบ Haskell
ฉันเพิ่งเริ่มโครงการ Haskell ใหม่และต้องการตั้งค่าขั้นตอนการทดสอบที่ดีตั้งแต่เริ่มต้น ดูเหมือนว่า Haskell มีเครื่องมือทดสอบที่ยอดเยี่ยมและไม่เหมือนใครมากมายและวิธีการต่างๆมากมายในการผสานรวมเข้าด้วยกัน ฉันได้ตรวจสอบ: HUnit QuickCheck Benchpress HPC ความซับซ้อน ซึ่งทั้งหมดนี้ดูเหมือนจะทำงานได้ดีในโดเมนของพวกเขา แต่ฉันกำลังมองหาวิธีการทดสอบที่ครอบคลุมและรู้สึกสงสัยว่าสิ่งใดที่ทำงานได้ดีสำหรับคนอื่น ๆ
101 testing  haskell 

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