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

ภาษาโปรแกรมที่ใช้งานได้

3
Banana split และ fusion ในการเขียนโปรแกรมทำงานคืออะไร
คำศัพท์เหล่านี้ถูกกล่าวถึงในหลักสูตรมหาวิทยาลัยของฉัน googling อย่างรวดเร็วชี้ให้ฉันเห็นเอกสารจากมหาวิทยาลัยบางส่วน แต่ฉันกำลังมองหาคำอธิบายง่ายๆ

2
วิธีที่สะอาดที่สุดในการรายงานข้อผิดพลาดใน Haskell
ฉันทำงานเกี่ยวกับการเรียนรู้ Haskell และฉันเจอวิธีการจัดการกับข้อผิดพลาดสามวิธีในฟังก์ชั่นที่ฉันเขียน: ฉันสามารถเขียนได้ง่ายerror "Some error message."ซึ่งมีข้อยกเว้น ฉันสามารถรับฟังก์ชั่นการส่งคืนMaybe SomeTypeซึ่งฉันสามารถหรือไม่สามารถคืนสิ่งที่ฉันต้องการคืนได้ ฉันสามารถใช้ฟังก์ชันส่งคืนEither String SomeTypeได้ซึ่งฉันสามารถส่งคืนข้อความแสดงข้อผิดพลาดหรือสิ่งที่ถูกขอให้ส่งคืนได้ตั้งแต่แรก คำถามของฉันคือฉันควรใช้วิธีใดในการจัดการกับข้อผิดพลาดและเพราะเหตุใด บางทีฉันควรวิธีการที่แตกต่างกันขึ้นอยู่กับบริบทหรือไม่ ความเข้าใจปัจจุบันของฉันคือ: มันเป็น "ยาก" ที่จะจัดการกับข้อยกเว้นในรหัสการทำงานอย่างหมดจดและใน Haskell หนึ่งต้องการให้สิ่งต่าง ๆ ทำงานได้อย่างหมดจดที่สุด การกลับมาMaybe SomeTypeเป็นสิ่งที่เหมาะสมที่จะทำถ้าฟังก์ชั่นจะล้มเหลวหรือประสบความสำเร็จ (เช่นไม่มีวิธีที่แตกต่างกันที่มันจะล้มเหลว ) การกลับมาEither String SomeTypeเป็นสิ่งที่ควรทำหากฟังก์ชั่นสามารถล้มเหลวได้หลายวิธี

1
ทำไม Haskell จึงไม่มีแลมบ์ดาระดับนามธรรม?
มีเหตุผลทางทฤษฎีบ้างไหม (เช่นว่าการตรวจสอบชนิดหรือการอนุมานประเภทจะไม่สามารถตัดสินใจได้) หรือเหตุผลเชิงปฏิบัติ (ยากเกินกว่าที่จะใช้อย่างถูกต้อง) ปัจจุบันเราสามารถห่อสิ่งต่างๆให้เป็นnewtypeเช่นนั้นได้ newtype Pair a = Pair (a, a) แล้วมี Pair :: * -> * λ(a:*). (a,a)แต่เราไม่สามารถทำสิ่งที่ชอบ (มีบางภาษาที่มีพวกเขาตัวอย่างเช่นScala ทำ )

2
การตรวจสอบประเภทและประเภทการเรียกซ้ำ (การเขียน Y combinator ใน Haskell / Ocaml)
เมื่ออธิบายผู้ประสานงาน Y ในบริบทของ Haskell มักจะกล่าวว่าการนำไปใช้งานแบบตรงไปตรงมาจะไม่ตรวจสอบประเภทใน Haskell เนื่องจากเป็นแบบเรียกซ้ำ ตัวอย่างเช่นจากRosettacode : The obvious definition of the Y combinator in Haskell canot be used because it contains an infinite recursive type (a = a -> b). Defining a data type (Mu) allows this recursion to be broken. newtype Mu a = Roll { …

1
Haskell สร้างและสร้างสภาพแวดล้อมที่คล้ายคลึงกับ Maven
ฉันเคยเป็นนักพัฒนา Java มานาน แต่เมื่อเร็ว ๆ นี้ฉันเข้าร่วมทีม Haskell ในโลกของจาวาถ้าคุณมีโครงการขนาดใหญ่โดยมีหลายทีมที่ทำงานอยู่วิธีการทั่วไปคือการใช้เซิร์ฟเวอร์สิ่งประดิษฐ์เช่น Maven เพื่อความสะดวกและรวดเร็วในการพัฒนา เครื่องมือสร้างจำนวนมากเช่น Ant, Maven, Gradle สามารถสร้างโครงการและอัปโหลดไฟล์ jar ไปยังเซิร์ฟเวอร์สิ่งประดิษฐ์ที่สามารถใช้งานโดยส่วนที่เหลือของทีมโดยไม่มีความเจ็บปวด ดังนั้นโดยการแยกโครงการออกเป็นโครงการย่อยขนาดเล็กเวลาสร้างจะลดลงอย่างมาก ในด้านของ Haskell เราใช้cabalเพื่อสร้างโครงการ โครงการของเราใช้เวลาในการสร้างประมาณ 10-15 นาทีโดยไม่มีการเพิ่มประสิทธิภาพ ใช้เวลาสองสามชั่วโมงหากเปิดการปรับแต่งคอมไพเลอร์ซึ่งเป็นเรื่องเจ็บปวด ฉันสงสัยว่าเราจะทำสิ่งเดียวกันกับที่เราทำใน Java ที่นี่ได้อย่างไร มีวิธีง่าย ๆ ในการรวบรวมและอัปโหลดไบนารีของแพ็คเกจ (ไลบรารี) ไปยังเซิร์ฟเวอร์สิ่งประดิษฐ์และใช้ไบนารีที่สร้างไว้ล่วงหน้าในเวลาบิลด์หรือไม่ ฉันรู้ว่าเนื่องจาก Haskell สร้างรหัสเครื่อง (แทนที่จะเป็นรหัสไบต์ใน Java) อาจมีปัญหาความเข้ากันได้ แต่เราอาจมีไบนารีต่างกันสำหรับสถาปัตยกรรม / ระบบปฏิบัติการต่าง ๆ ที่เก็บไว้ในเซิร์ฟเวอร์ส่วน

2
เป็นไปได้หรือไม่ที่จะ“ อบมิติเป็นประเภท” ใน Haskell?
สมมติว่าฉันต้องการเขียนไลบรารีที่เกี่ยวข้องกับเวกเตอร์และเมทริกซ์ เป็นไปได้หรือไม่ที่จะอบมิติข้อมูลให้เป็นประเภทเพื่อให้การดำเนินการของมิติที่เข้ากันไม่ได้สร้างข้อผิดพลาดในเวลารวบรวม ตัวอย่างเช่นฉันต้องการให้ลายเซ็นของผลิตภัณฑ์ดอทเป็นแบบนี้ dotprod :: Num a, VecDim d => Vector a d -> Vector a d -> a โดยที่dtype นั้นมีค่าจำนวนเต็มเดียว (แสดงถึงมิติของเวกเตอร์เหล่านี้) ฉันคิดว่านี้สามารถทำได้โดยการกำหนด (ด้วยมือ) VecDimเป็นชนิดที่แยกต่างหากสำหรับแต่ละจำนวนเต็มและกลุ่มพวกเขาในระดับชนิดที่เรียกว่า มีกลไกในการ "สร้าง" ประเภทดังกล่าวหรือไม่? หรือบางทีวิธีที่ดีกว่า / ง่ายกว่าในการบรรลุสิ่งเดียวกัน?

3
Haskell มีประเภทที่ขึ้นต่อกันหรือไม่
ฉันรู้ว่า Haskell มีความสามารถในการกำหนดประเภทของประเภทอื่น (คล้ายกับเทมเพลตการเขียนโปรแกรมใน C ++) แต่ฉันสงสัยว่า Haskell สามารถพาราเม็ตอัปประเภทที่มีค่ามากกว่าได้หรือไม่ ด้วยประเภทที่ขึ้นอยู่กับคุณสามารถมีประเภทที่ parametrised กว่าจำนวนเต็มเช่นเวกเตอร์ขนาด n, เมทริกซ์ของขนาด n × m เป็นต้น ถ้าไม่ทำไมไม่ และมีความเป็นไปได้ที่จะรองรับในอนาคตหรือไม่?
20 haskell 

3
จะปรับปรุงประสิทธิภาพด้วยการเขียนโปรแกรมฟังก์ชั่นได้อย่างไร?
ฉันเพิ่งจะได้รับการเรียนรู้ Haskell สำหรับคำแนะนำที่ดีมากและในทางปฏิบัติฉันต้องการที่จะแก้ปัญหาProject Euler ปัญหา 5ด้วยซึ่งระบุ: จำนวนบวกที่เล็กที่สุดคืออะไรหารด้วยจำนวนทั้งหมดตั้งแต่ 1 ถึง 20 อย่างเท่าเทียมกัน? ฉันตัดสินใจที่จะเขียนฟังก์ชั่นก่อนว่าจำนวนที่กำหนดนั้นสามารถหารด้วยตัวเลขเหล่านี้ได้หรือไม่: divisable x = all (\y -> x `mod` y == 0)[1..20] จากนั้นฉันคำนวณขนาดเล็กที่สุดโดยใช้head: sm = head [x | x <- [1..], divisable x] และในที่สุดก็เขียนบรรทัดเพื่อแสดงผลลัพธ์: main = putStrLn $ show $ sm น่าเสียดายที่ใช้เวลาประมาณ 30 วินาทีจึงจะเสร็จ การทำสิ่งเดียวกันกับตัวเลข 1 ถึง 10 ให้ผลลัพธ์เกือบจะในทันที …
20 haskell 

4
Haskell เก่งในการสอนพื้นฐานคณิตศาสตร์หรือไม่?
ล็อคแล้ว คำถามและคำตอบนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ ฉันมีส่วนร่วมในการสอนคณิตศาสตร์ให้กับชั้นเรียนที่มีข้อกำหนดเช่น AS และข้อกำหนดคณิตศาสตร์ระดับ ปกติหนังสือเรียนจะให้ตัวอย่างของซอฟต์แวร์คอมพิวเตอร์ที่ใช้กับงานคณิตศาสตร์ แต่โดยทั่วไปจะใช้ซอฟต์แวร์ประยุกต์เช่น mathlab, mathematica หรือ derive แม้ว่าจะใช้ภาษาการเขียนโปรแกรมจริงมันเป็นภาษาที่ใช้กันทั่วไปเช่น Pascal และนี่เป็นเรื่องน่าเศร้าในความคิดของฉัน เพราะ Haskell มีชื่อเสียงด้านความรู้สึกของเขาเกี่ยวกับคณิตศาสตร์และเนื่องจากฉันสนใจมันเช่นกันฉันอยากถามว่า Haskell เป็นตัวเลือกที่ดีสำหรับวิธีการออกกำลังกายแบบขยายสำหรับนักเรียนชั้นปีแรกของมหาวิทยาลัยหรือไม่ วิชาทั่วไปคือฟังก์ชั่น, caclulus, ข้อ จำกัด , แต่ยังรวมถึงพีชคณิตเชิงเส้นเช่น ฉันมีประสบการณ์ความรู้ระดับกลางในการเขียนโปรแกรม (c #, ruby, powershell, javascript, tex) และยังได้เข้าหาการเขียนโปรแกรมการทำงานกับ XSLT แล้ว คำตอบจะถูกปรับปรุงอย่างมีความรับผิดชอบ คำตอบที่ละเอียดรวมถึงตัวอย่างพื้นฐานของรหัส Haskell ที่นำไปใช้กับคณิตศาสตร์เช่นพีชคณิตเชิงเส้น (เช่นพื้นที่เวกเตอร์), ชื่อพหุนาม, การแก้สมการเชิงเส้นเป็นที่นิยมอย่างมากและมีเป้าหมายเป็นสิ่งที่ต้องการ
19 haskell 

1
สำรวจกรอบงานเว็บของ Haskell [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา มีเฟรมเวิร์กเว็บจำนวนมากสำหรับ Haskell เช่นHappstack , SnapและYesodและอาจมีอีกไม่กี่อย่าง พวกเขาต่างกันในด้านใดบ้าง? ตัวอย่างเช่น: คุณสมบัติ (เช่นเซิร์ฟเวอร์เท่านั้นหรือสคริปต์ไคลเอนต์รองรับฐานข้อมูลประเภทต่างๆได้ง่าย) ครบกําหนด (เช่นความมั่นคงคุณภาพเอกสาร) ความสามารถในการปรับขยาย (เช่นประสิทธิภาพการทำงานที่เป็นนามธรรม) เป้าหมายหลัก นอกจากนี้ตัวอย่างของไซต์จริง / เว็บแอพที่ใช้เฟรมเวิร์กเหล่านี้คืออะไร ขอบคุณมาก.

4
การติดตาเป็นภาษาที่ใช้งานได้จริงเพียงใด?
รูปแบบของการใช้ตัวจัดการคำสั่งในการจัดการกับการคงอยู่ของภาษาที่ใช้งานได้อย่างแท้จริงซึ่งเราต้องการทำให้โค้ดที่เกี่ยวข้องกับ IO มีความบางที่สุด เมื่อใช้การออกแบบที่ขับเคลื่อนด้วยโดเมนในภาษาเชิงวัตถุเป็นเรื่องปกติที่จะใช้รูปแบบคำสั่ง / ตัวจัดการเพื่อดำเนินการเปลี่ยนแปลงสถานะ ในการออกแบบตัวจัดการคำสั่งจะอยู่ด้านบนของวัตถุโดเมนของคุณและรับผิดชอบต่อตรรกะที่เกี่ยวข้องกับการคงอยู่ที่น่าเบื่อเช่นการใช้ที่เก็บข้อมูลและการเผยแพร่กิจกรรมโดเมน ตัวจัดการเป็นหน้าสาธารณะของโมเดลโดเมนของคุณ รหัสแอปพลิเคชันเช่น UI เรียกตัวจัดการเมื่อจำเป็นต้องเปลี่ยนสถานะของวัตถุโดเมน ร่างใน C #: public class DiscardDraftDocumentCommandHandler : CommandHandler<DiscardDraftDocument> { IDraftDocumentRepository _repo; IEventPublisher _publisher; public DiscardDraftCommandHandler(IDraftDocumentRepository repo, IEventPublisher publisher) { _repo = repo; _publisher = publisher; } public override void Handle(DiscardDraftDocument command) { var document = _repo.Get(command.DocumentId); document.Discard(command.UserId); _publisher.Publish(document.NewEvents); } …

3
ภาษาทำงานเร็วที่สุด
ฉันเพิ่งได้รับการขุดเจาะเข้าไปในการเขียนโปรแกรมการทำงานโดยเฉพาะอย่างยิ่ง Haskell และ F #, ก่อนหน้านี้มากขึ้น หลังจาก googling ไปรอบ ๆ ฉันไม่สามารถหาการเปรียบเทียบเกณฑ์มาตรฐานของภาษาที่ใช้งานได้ดีกว่า (Scala, F # ฯลฯ ) ฉันรู้ว่ามันไม่ยุติธรรมสำหรับบางภาษา (Scala มาถึงใจ) เนื่องจากพวกเขาเป็นลูกผสม แต่ฉันแค่อยากจะรู้ว่ามีประสิทธิภาพที่ดีกว่าซึ่งในการดำเนินงานและโดยรวม

1
ความคืบหน้าของบันทึก Haskell คืออะไร?
เมื่อเร็ว ๆ นี้ฉันได้พบปัญหาของเร็กคอร์ดของ Haskell อีกครั้งโดยเฉพาะชื่อฟิลด์ที่ไม่ซ้ำใคร (มันเป็นความเจ็บปวด ... ) ฉันได้อ่านข้อเสนอสำหรับเร็กคอร์ดใน Haskellจาก SPJ และ Greg Morrisett แต่การอัปเดตครั้งล่าสุดในปี 2003 กระดาษอีกเล่มหนึ่งชื่อLightweight Extensible Records สำหรับ Haskellจาก SPJ และ Mark Jones ยิ่งแก่กว่า: มาจากเวิร์กช็อป Haskell ในปี 1999 ตอนนี้ฉันสงสัยว่ากระบวนการให้ระเบียนใหม่ของ Haskell มีความคืบหน้าหรือไม่ ไม่มีใครรู้อะไรเกี่ยวกับมันหรือใครสามารถชี้ให้ฉันไปอ่านเพิ่มเติมหรือไม่

6
คุณต้องการแนะนำต้นไม้ไบนารีที่ปรับสมดุลตัวเองแบบใด
ฉันเรียนรู้ Haskell และออกกำลังกายฉันกำลังสร้างต้นไม้ไบนารี ต้องสร้างต้นไม้ไบนารีขึ้นมาเป็นประจำฉันต้องการที่จะปรับมันให้สมดุลกัน ดังนั้น: ข้อใดมีประสิทธิภาพมากที่สุด สิ่งที่ง่ายที่สุดที่จะใช้? ใช้บ่อยที่สุด? แต่อะไรที่คุณแนะนำ? ฉันคิดว่าสิ่งนี้เป็นของที่นี่เพราะเปิดให้มีการอภิปราย

3
ทำไมไม่มีประเภทของฟังก์ชัน?
ในปัญหาการเรียนรู้ที่ฉันทำไปด้วยฉันรู้ว่าฉันต้องการประเภทของฟังก์ชันที่มีการใช้งานการเขียนเป็นต้นเหตุผล ... มันจะสะดวกในการปฏิบัติต่อการเป็นตัวแทนของฟังก์ชั่นราวกับว่ามันเป็นฟังก์ชั่นของตัวเองเพื่อให้การใช้ฟังก์ชั่นโดยนัยใช้ล่ามและฟังก์ชั่นการแต่งได้คำอธิบายใหม่ เมื่อคุณมี typeclass สำหรับฟังก์ชั่นคุณสามารถได้รับ typeclass สำหรับฟังก์ชั่นพิเศษ - ในกรณีของฉันฉันต้องการฟังก์ชั่นกลับด้าน ตัวอย่างเช่นฟังก์ชั่นที่ใช้การชดเชยจำนวนเต็มอาจแสดงโดย ADT ที่มีจำนวนเต็ม การใช้ฟังก์ชั่นเหล่านั้นหมายถึงการเพิ่มจำนวนเต็ม องค์ประกอบถูกนำมาใช้โดยการเพิ่มจำนวนเต็มห่อ ฟังก์ชันผกผันมีจำนวนเต็มค่าเป็นลบ ฟังก์ชั่นเอกลักษณ์ห่อศูนย์ ไม่สามารถจัดหาฟังก์ชั่นคงที่ได้เนื่องจากไม่มีตัวแทนที่เหมาะสมสำหรับมัน แน่นอนว่ามันไม่จำเป็นต้องสะกดสิ่งต่าง ๆ ราวกับว่ามันเป็นค่าของฟังก์ชั่น Haskell ของแท้ แต่เมื่อฉันมีความคิดฉันคิดว่าห้องสมุดแบบนั้นต้องมีอยู่แล้วและอาจใช้การสะกดมาตรฐาน แต่ฉันไม่สามารถหาประเภทของงานพิมพ์ในห้องสมุด Haskell ได้ ฉันพบโมดูลData.Functionแต่ไม่มีประเภทของงานพิมพ์ - มีเพียงฟังก์ชันทั่วไปบางส่วนที่มีให้จาก Prelude ดังนั้น - ทำไมไม่มี typeclass สำหรับฟังก์ชั่น? เป็น "เพียงเพราะไม่มี" หรือ "เพราะไม่มีประโยชน์อย่างที่คุณคิด" หรืออาจมีปัญหาพื้นฐานกับความคิด? ปัญหาที่เป็นไปได้ที่ใหญ่ที่สุดที่ฉันเคยคิดมาก่อนก็คือฟังก์ชั่นแอปพลิเคชั่นในฟังก์ชั่นที่เกิดขึ้นจริงอาจจะต้องได้รับการใส่รหัสเป็นพิเศษโดยคอมไพเลอร์เพื่อหลีกเลี่ยงปัญหาการวนซ้ำ และเพื่อที่ฉันจะต้องเรียกใช้ฟังก์ชั่นแอปพลิเคชั่นและเพื่อที่จะทำ ... เบาะแสเพิ่มเติม โค้ดตัวอย่างเพื่อแสดงสิ่งที่ฉันตั้งใจจะ ... {-# LANGUAGE MultiParamTypeClasses …

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