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

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

1
ความเชี่ยวชาญด้วยข้อ จำกัด
ฉันมีปัญหาในการทำให้ GHC เชี่ยวชาญฟังก์ชั่นที่มีข้อ จำกัด ด้านชั้นเรียน ผมมีตัวอย่างที่น้อยที่สุดของปัญหาของฉันที่นี่: Foo.hsและ Main.hs รวบรวมไฟล์สองไฟล์ (GHC 7.6.2, ghc -O3 Main) และเรียกใช้ หมายเหตุ: Foo.hsถูกปล้นจริง ๆ ถ้าคุณต้องการที่จะเห็นว่าทำไมข้อ จำกัด เป็นสิ่งจำเป็นที่คุณสามารถดูรหัสเล็ก ๆ น้อย ๆที่นี่ ถ้าฉันใส่รหัสในไฟล์เดียวหรือทำการเปลี่ยนแปลงเล็ก ๆ น้อย ๆ อื่น ๆ อีกมากมายเพียงแค่ GHC inlines plusFastCycการเรียกร้องให้ สิ่งนี้จะไม่เกิดขึ้นในรหัสจริงเนื่องจากplusFastCycมีขนาดใหญ่เกินไปที่ GHC จะอินไลน์แม้ว่าจะถูกทำเครื่องหมายไว้INLINEก็ตาม ประเด็นก็คือจะต้องชำนาญการโทรplusFastCycไม่ใช่แบบอินไลน์ plusFastCycถูกเรียกในหลาย ๆ ที่ในรหัสจริงดังนั้นการทำซ้ำฟังก์ชันที่มีขนาดใหญ่จะไม่เป็นที่ต้องการแม้ว่าฉันจะบังคับให้ GHC ทำเช่นนั้น รหัสที่น่าสนใจคือplusFastCycในFoo.hsทำซ้ำที่นี่: {-# INLINEABLE plusFastCyc #-} {-# SPECIALIZE …
156 haskell  ghc 

7
ผลกระทบของ foldr กับ foldl (หรือ foldl ')
ประการแรกโลกแห่งความจริง Haskellซึ่งฉันอ่านกล่าวว่าจะไม่เคยใช้และแทนที่จะใช้foldl foldl'ดังนั้นฉันจึงเชื่อมั่น แต่ฉันมีหมอกในเมื่อจะใช้กับfoldr foldl'แม้ว่าฉันจะสามารถเห็นโครงสร้างของวิธีการทำงานของพวกเขาที่แตกต่างออกไปตรงหน้าฉันก็โง่เกินกว่าที่จะเข้าใจว่า "ซึ่งดีกว่า" ฉันคิดว่ามันดูเหมือนว่าฉันไม่ควรทำเรื่องสำคัญซึ่งใช้เพราะพวกเขาทั้งคู่ให้คำตอบเดียวกัน (ไม่ใช่พวกเขา?) ในความเป็นจริงประสบการณ์ก่อนหน้าของฉันกับโครงสร้างนี้มาจาก Ruby injectand Clojure's reduceซึ่งดูเหมือนจะไม่มีเวอร์ชั่น "ซ้าย" และ "ถูกต้อง" (คำถามด้านข้าง: พวกเขาใช้เวอร์ชันใด) ข้อมูลเชิงลึกใด ๆ ที่สามารถช่วยคัดสรรที่ท้าทายเช่นฉันจะได้รับการชื่นชมมาก!

6
ทำไม GHC ถึงใหญ่ / ใหญ่
มีคำตอบง่ายๆ: ทำไม GHC ถึงมีขนาดใหญ่? OCaml: 2MB Python: 15MB SBCL: 9MB OpenJRE - 26MB GHC: 113MB ไม่สนใจในการประกาศเรื่อง "ทำไมฉันไม่ควรสนใจเรื่องขนาดถ้า Haskell เป็นเครื่องมือที่เหมาะสม"; นี่เป็นคำถามทางเทคนิค
147 haskell  ghc 

1
การจัดการประเภทรายการด้วย Esqueleto
ฉันมีชนิดข้อมูลที่กำหนดเป็น: data ComitteeView = CommitteeView { committeeId :: CommitteeId , committeeMembers :: [Person] } data CommitteesView = CommitteesView { committeeView :: [CommitteeView] } ตอนนี้มันมีอยู่ฉันมีรูปแบบถาวรที่กำหนดเป็น: Person name Text Committee name Text CommitteePerson personId PersonId committeeId CommitteeId ฉันสามารถสร้างแบบสอบถามได้อย่างง่ายดายเพื่อเติม CommitteeView โดยใช้ Esqueleto มันจะเป็นอะไรเช่นนี้: getCommitteeView cid = CommitteeView <$> runDB $ select $ from …
144 sql  list  haskell  esqueleto 

2
GHC-mod ต้องใช้ชื่อเต็มสำหรับประเภทหรือไม่
ฉันพยายามใช้ghc-modvim plugin เพื่อทำการพิมพ์ / ตรวจสอบไวยากรณ์ ฯลฯ อย่างไรก็ตามฉันพบว่าghc-modใช้เส้นทางแบบเต็มทุกประเภทในข้อความแสดงข้อผิดพลาดเช่น: test.hs|71 col 13 error| Couldn't match type ‘Data.Text.Internal.Text’ || with ‘[GHC.Types.Char]’ || Expected type: containers-0.5.6.2:Data.Map.Base.Map || [GHC.Types.Char] || ([(integer-gmp-1.0.0.0:GHC.Integer.Type.Integer, || integer-gmp-1.0.0.0:GHC.Integer.Type.Integer)], || containers-0.5.6.2:Data.Set.Base.Set || integer-gmp-1.0.0.0:GHC.Integer.Type.Integer) || Actual type: containers-0.5.6.2:Data.Map.Base.Map || Data.Text.Internal.Text || ([(integer-gmp-1.0.0.0:GHC.Integer.Type.Integer, || integer-gmp-1.0.0.0:GHC.Integer.Type.Integer)], || containers-0.5.6.2:Data.Set.Base.Set || integer-gmp-1.0.0.0:GHC.Integer.Type.Integer) || In the second …
143 haskell  ghc  ghc-mod 

1
การใช้ HsOpenSSL API อย่างเหมาะสมเพื่อติดตั้งเซิร์ฟเวอร์ TLS
ฉันกำลังพยายามหาวิธีการใช้OpenSSL.Session API อย่างถูกต้องในบริบทที่เกิดขึ้นพร้อมกัน เช่นสมมติว่าฉันต้องการใช้ a stunnel-style ssl-wrapperฉันคาดหวังว่าจะมีโครงสร้างโครงกระดูกพื้นฐานต่อไปนี้ซึ่งใช้การไร้เดียงสาfull-duplex tcp-port-forwarder: runProxy :: PortID -> AddrInfo -> IO () runProxy localPort@(PortNumber lpn) serverAddrInfo = do listener <- listenOn localPort forever $ do (sClient, clientAddr) <- accept listener let finalize sServer = do sClose sServer sClose sClient forkIO $ do tidToServer <- myThreadId bracket …
141 haskell  openssl  ssl 

8
Memoization ใน Haskell?
คำแนะนำใด ๆ เกี่ยวกับวิธีแก้ปัญหาอย่างมีประสิทธิภาพฟังก์ชันต่อไปนี้ใน Haskell สำหรับตัวเลขจำนวนมาก (n > 108) f(n) = max(n, f(n/2) + f(n/3) + f(n/4)) ฉันเคยเห็นตัวอย่างของการช่วยจำใน Haskell เพื่อแก้ตัวเลข fibonacci ซึ่งเกี่ยวข้องกับการคำนวณ (อย่างเกียจคร้าน) ตัวเลข fibonacci ทั้งหมดจนถึง n ที่ต้องการ แต่ในกรณีนี้สำหรับ n ที่กำหนดเราจำเป็นต้องคำนวณผลลัพธ์ระดับกลางเพียงไม่กี่รายการเท่านั้น ขอบคุณ

5
คำสั่งหลายบรรทัดใน GHCi
ฉันมีปัญหาในการป้อนคำสั่งหลายบรรทัดใน ghci โค้ด 2 บรรทัดต่อไปนี้ทำงานจากไฟล์: addTwo :: Int -> Int -> Int addTwo x y = x + y แต่เมื่อฉันป้อน ghci ฉันได้รับข้อผิดพลาด: <interactive>:1:1: error: Variable not in scope: addTwo :: Int -> Int -> Int ฉันลองใส่รหัสเข้าไปข้างใน:{ ... :}ด้วย แต่ก็ใช้ไม่ได้กับตัวอย่างนี้เช่นกันเพราะนี่เป็นเพียงการต่อท้ายบรรทัดให้เป็นบรรทัดเดียวซึ่งไม่ควรเป็นเช่นนั้น ฉันใช้ WinGHCi เวอร์ชัน 2011.2.0.1
139 haskell  ghci 

5
"การยก" ใน Haskell คืออะไร
ฉันไม่เข้าใจว่า "การยก" คืออะไร ฉันควรเข้าใจพระก่อนหรือไม่ก่อนที่จะเข้าใจว่า "ลิฟต์" คืออะไร? (ฉันไม่รู้เกี่ยวกับพระอย่างสมบูรณ์เช่นกัน :) หรือใครบางคนสามารถอธิบายให้ฉันด้วยคำง่ายๆ?

2
เหตุใดผู้ประเมินที่เหมาะสม opt-calculus จึงสามารถคำนวณเลขชี้กำลังแบบโมดูลาร์ขนาดใหญ่โดยไม่ต้องใช้สูตรได้
หมายเลขคริสตจักรเป็นการเข้ารหัสตัวเลขธรรมชาติเป็นฟังก์ชัน (\ f x → (f x)) -- church number 1 (\ f x → (f (f (f x)))) -- church number 3 (\ f x → (f (f (f (f x))))) -- church number 4 อย่างเรียบร้อยคุณสามารถยกกำลัง 2 หมายเลขคริสตจักรได้โดยใช้มัน นั่นคือถ้าคุณใช้ 4-2 คุณจะได้รับจำนวนคริสตจักรหรือ16 2^4เห็นได้ชัดว่านั่นเป็นเรื่องที่ไม่สามารถเกิดขึ้นได้จริง จำนวนคริสตจักรต้องการหน่วยความจำเชิงเส้นและช้ามากจริงๆ การประมวลผลสิ่ง10^10ที่ GHCI ตอบได้อย่างรวดเร็วจะใช้เวลานานและไม่สามารถใส่หน่วยความจำบนคอมพิวเตอร์ของคุณได้ ฉันได้ทำการทดลองกับผู้ประเมินที่เหมาะสมที่สุดเมื่อเร็ว ๆ นี้ …

1
วิธีการจัดส่งโปรแกรมเรียกใช้งานด้วย Language.Haskell.Interpreter
ฉันหวังว่าจะใช้ล่าม Haskell hintเพื่อที่ฉันจะได้เขียนปลั๊กอินใน Haskell เพื่อใช้กับโปรแกรมของฉัน ฉันไม่ต้องการจัดส่งแพลตฟอร์ม Haskell ทั้งหมดสำหรับโปรแกรมปฏิบัติการของฉัน โดยปกติ executables ของ Haskell นั้นมีอยู่ในตัวเอง ตัวอย่างเช่นการลบPATHจะไม่ทำให้เกิดปัญหา: $ PATH=. Hello Hello world อย่างไรก็ตามโปรแกรมทดสอบอย่างง่ายโดยใช้runInterpreterระเบิดถ้าฉันลบPATH: $ PATH=. TryHint GhcException "panic! (the 'impossible' happened)\n (GHC version 7.8.3 for x86_64-apple-darwin):\n\tDynamic linker not initialised\n\nPlease report this as a GHC bug: http://www.haskell.org/ghc/reportabug\n" ไลบรารีหรือไฟล์ปฏิบัติการใดที่ต้องมีอยู่ในสภาพแวดล้อมเพื่อให้ทำงานได้? otool ไม่ได้ให้คำแนะนำมาก: otool -L TryHint TryHint: …

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

5
มีฟังก์ชั่น Haskell เพื่อเชื่อมโยงรายการกับตัวคั่นหรือไม่
มีฟังก์ชั่นเพื่อเชื่อมองค์ประกอบของรายการที่มีตัวคั่นหรือไม่? ตัวอย่างเช่น: > foobar " " ["is","there","such","a","function","?"] ["is there such a function ?"] ขอบคุณสำหรับการตอบกลับใด ๆ !
131 list  haskell  concat 

5
การลดเวลาหยุดการรวบรวมขยะในโปรแกรม Haskell
เรากำลังพัฒนาโปรแกรมที่รับและส่งต่อ "ข้อความ" ในขณะที่เก็บประวัติชั่วคราวของข้อความเหล่านั้นเพื่อให้สามารถบอกประวัติข้อความหากมีการร้องขอ ข้อความจะถูกระบุเป็นตัวเลขโดยทั่วไปจะมีขนาดประมาณ 1 กิโลไบต์และเราจำเป็นต้องเก็บรักษาข้อความเหล่านี้นับแสนรายการ เราต้องการเพิ่มประสิทธิภาพโปรแกรมนี้สำหรับเวลาแฝง: เวลาระหว่างการส่งและรับข้อความต้องน้อยกว่า 10 มิลลิวินาที โปรแกรมนี้เขียนใน Haskell และคอมไพล์ด้วย GHC อย่างไรก็ตามเราพบว่าการเก็บรวบรวมขยะหยุดชั่วคราวนานเกินไปสำหรับข้อกำหนดด้านเวลาแฝงของเรา: มากกว่า 100 มิลลิวินาทีในโปรแกรมจริงของเรา โปรแกรมต่อไปนี้เป็นเวอร์ชันที่เรียบง่ายของแอปพลิเคชันของเรา มันใช้Data.Map.Strictเพื่อเก็บข้อความ ข้อความจะถูกByteStrings Intระบุด้วย 1,000,000 ข้อความถูกแทรกในลำดับตัวเลขที่เพิ่มขึ้นและข้อความที่เก่าที่สุดจะถูกลบออกอย่างต่อเนื่องเพื่อเก็บประวัติไว้ที่สูงสุด 200,000 ข้อความ module Main (main) where import qualified Control.Exception as Exception import qualified Control.Monad as Monad import qualified Data.ByteString as ByteString import qualified Data.Map.Strict as Map …

4
ความแตกต่างระหว่าง "mod" และ "rem" ใน Haskell
อะไรคือความแตกต่างระหว่างmodและremใน Haskell? ทั้งสองดูเหมือนจะให้ผลลัพธ์ที่เหมือนกัน *Main> mod 2 3 2 *Main> rem 2 3 2 *Main> mod 10 5 0 *Main> rem 10 5 0 *Main> mod 1 0 *** Exception: divide by zero *Main> rem 1 0 *** Exception: divide by zero *Main> mod 1 (-1) 0 *Main> rem 1 (-1) …
130 haskell 

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