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

Glasgow Haskell Compiler เป็นคอมไพเลอร์โอเพ่นซอร์สที่ล้ำสมัยและสภาพแวดล้อมแบบโต้ตอบสำหรับภาษาที่ใช้งานได้ Haskell ใช้แท็กนี้สำหรับคำถามเฉพาะเกี่ยวกับ GHC และไม่เกี่ยวกับ 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 

6
อินสแตนซ์ Orphaned ใน Haskell
เมื่อรวบรวมแอปพลิเคชัน Haskell ของฉันด้วย-Wallตัวเลือก GHC จะบ่นเกี่ยวกับอินสแตนซ์ที่ไม่มีเจ้าของตัวอย่างเช่น: Publisher.hs:45:9: Warning: orphan instance: instance ToSElem Result ชั้นประเภทToSElemจะไม่ระเบิดก็กำหนดโดยHStringTemplate ตอนนี้ฉันรู้วิธีแก้ไขแล้ว (ย้ายการประกาศอินสแตนซ์ไปไว้ในโมดูลที่มีการประกาศผลลัพธ์) และฉันรู้ว่าทำไม GHC จึงต้องการหลีกเลี่ยงอินสแตนซ์ที่ไม่มีเจ้าของ แต่ฉันก็ยังเชื่อว่าวิธีของฉันดีกว่า ฉันไม่สนใจว่าคอมไพเลอร์จะไม่สะดวก - แทนที่จะเป็นฉัน เหตุผลที่ฉันต้องการประกาศไฟล์ ToSElemอินสแตนซ์ในโมดูลผู้เผยแพร่เนื่องจากเป็นโมดูลผู้เผยแพร่ที่ขึ้นอยู่กับ HStringTemplate ไม่ใช่โมดูลอื่น ๆ ฉันพยายามแยกความกังวลและหลีกเลี่ยงไม่ให้ทุกโมดูลขึ้นอยู่กับ HStringTemplate ฉันคิดว่าข้อดีอย่างหนึ่งของคลาสประเภทของ Haskell เมื่อเปรียบเทียบกับอินเทอร์เฟซของ Java คือเป็นแบบเปิดมากกว่าปิดดังนั้นจึงไม่จำเป็นต้องประกาศอินสแตนซ์ในตำแหน่งเดียวกับประเภทข้อมูล คำแนะนำของ GHC ดูเหมือนจะเพิกเฉยต่อสิ่งนี้ ดังนั้นสิ่งที่ฉันกำลังมองหาคือการตรวจสอบความถูกต้องว่าความคิดของฉันเป็นสิ่งที่ดีและฉันจะมีเหตุผลที่จะเพิกเฉย / ระงับคำเตือนนี้หรือการโต้แย้งที่น่าเชื่อกว่าในการทำสิ่งต่างๆในแบบของฉัน
87 haskell  ghc  typeclass 

1
เหตุใดรหัส Haskell นี้จึงทำงานช้าลงด้วย -O
ชิ้นส่วนของรหัส Haskell นี้จะทำงานมากช้า-Oแต่-Oควรจะไม่เป็นอันตราย ใครช่วยบอกทีว่าเกิดอะไรขึ้น? หากเป็นเรื่องสำคัญมันเป็นความพยายามที่จะแก้ปัญหานี้และใช้การค้นหาแบบไบนารีและโครงสร้างส่วนต่อเนื่อง import Control.Monad import Data.Array data Node = Leaf Int -- value | Branch Int Node Node -- sum, left child, right child type NodeArray = Array Int Node -- create an empty node with range [l, r) create :: Int -> Int -> Node create …

4
เหตุใดฉันจึงไม่สามารถทำให้ String เป็นอินสแตนซ์ของประเภทคลาสได้
ให้ : data Foo = FooString String … class Fooable a where --(is this a good way to name this?) toFoo :: a -> Foo ฉันต้องการสร้างStringตัวอย่างของFooable: instance Fooable String where toFoo = FooString GHC ก็บ่นว่า: Illegal instance declaration for `Fooable String' (All instance types must be of the form (T …

1
จะอ่าน "หลักฐาน" ของ GHC Core นี้ได้อย่างไร
ฉันเขียน Haskell เล็กน้อยเพื่อหาว่า GHC พิสูจน์ได้อย่างไรว่าสำหรับจำนวนธรรมชาติคุณสามารถลดจำนวนคู่ลงครึ่งหนึ่งเท่านั้น: {-# LANGUAGE DataKinds, GADTs, KindSignatures, TypeFamilies #-} module Nat where data Nat = Z | S Nat data Parity = Even | Odd type family Flip (x :: Parity) :: Parity where Flip Even = Odd Flip Odd = Even data ParNat :: Parity -> …

1
พฤติกรรมแปลก ๆ ของ (^) ใน Haskell
ทำไม GHCi ให้คำตอบที่ไม่ถูกต้องด้านล่าง GHCi λ> ((-20.24373193905347)^12)^2 - ((-20.24373193905347)^24) 4.503599627370496e15 Python3 >>> ((-20.24373193905347)**12)**2 - ((-20.24373193905347)**24) 0.0 อัพเดท ฉันจะใช้ฟังก์ชั่นของ Haskell (^) ดังนี้ powerXY :: Double -> Int -> Double powerXY x 0 = 1 powerXY x y | y < 0 = powerXY (1/x) (-y) | otherwise = let z = powerXY …

1
การส่งแบบสแตติกประเภทโดยนัย (การบีบบังคับ) ใน Haskell
ปัญหา พิจารณาปัญหาการออกแบบต่อไปนี้ใน Haskell ฉันมีความเรียบง่าย, EDSL สัญลักษณ์ที่ฉันต้องการที่จะแสดงตัวแปรและการแสดงออกทั่วไป (มีหลายชื่อหลายตัวแปร) x^2 * y + 2*z + 1เช่น นอกจากนี้ผมต้องการที่จะแสดงสมสัญลักษณ์บางกว่าการแสดงออกการพูดx^2 + 1 = 1เช่นเดียวกับคำนิยามx := 2*y - 2เช่น เป้าหมายคือ: มีประเภทที่แยกต่างหากสำหรับตัวแปรและนิพจน์ทั่วไป - ฟังก์ชันบางอย่างอาจนำไปใช้กับตัวแปรและไม่ใช่นิพจน์ที่ซับซ้อน ตัวอย่างเช่นตัวดำเนินการคำนิยาม:=อาจเป็นประเภท (:=) :: Variable -> Expression -> Definitionและไม่ควรส่งผ่านนิพจน์ที่ซับซ้อนเป็นพารามิเตอร์ด้านซ้ายมือ (แม้ว่ามันจะเป็นไปได้ที่จะส่งตัวแปรเป็นพารามิเตอร์ด้านขวาโดยไม่ต้องมีการแคสต์อย่างชัดเจน ) . มีตัวอย่างของนิพจน์Numเพื่อให้สามารถส่งเสริมตัวอักษรจำนวนเต็มเป็นนิพจน์และใช้สัญลักษณ์ที่สะดวกสำหรับการดำเนินการเกี่ยวกับพีชคณิตทั่วไปเช่นการบวกหรือการคูณโดยไม่ต้องแนะนำตัวดำเนินการ wrapper เสริม ในคำอื่น ๆ ผมอยากจะมีนัยและคงประเภทหล่อ (บังคับ) ของตัวแปรที่จะแสดงออก ตอนนี้ฉันรู้แล้วว่าไม่มีการปลดเปลื้องประเภทใน Haskell อย่างไรก็ตามแนวคิดการเขียนโปรแกรมเชิงวัตถุบางอย่าง (การสืบทอดง่าย …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.