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

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

3
ดูเหมือนว่า (-) จะมีสองประเภทแตกต่างกันอย่างไร
ใน ghci เมื่อฉันพิมพ์ :t (-) เพื่อหาประเภทของ(-)มันจะกลับมา (-) :: Num a => a -> a -> a แต่เมื่อผมเขียน-1Haskell ผลตอบแทนจำนวนซึ่งดูเหมือนว่าจะบ่งบอกว่าเป็นประเภท(-) Num a => a -> aวิธีการสามารถ(-)ดูเหมือนจะมีสองชนิดแตกต่างกันอย่างไร
12 haskell 

3
ฉันจะทำให้ฟังก์ชัน Haskell ของฉันสั้นที่สุดเท่าที่จะทำได้ได้อย่างไร
seasonฟังก์ชั่นการใช้ฟังก์ชั่นพีชคณิต แต่ฉันรู้สึกเหมือนรหัสซ้ำ ฉันจะทำให้มันสั้นที่สุดได้อย่างไร data Month = Jan | Feb | Mar | Apr | May | June | July | Aug | Sept| Oct | Nov | Dec deriving (Eq,Ord,Show,Read) data Seasons = Spring | Summer | Autumn | Winter deriving (Eq,Ord,Show,Read) season :: Month -> Seasons season Jan = …

2
การรวมส่วนของ Haskell Code เพื่อให้ได้ภาพที่ใหญ่ขึ้น
นี่คือรหัสที่ฉันเข้ามาบางที่ แต่ต้องการทราบวิธีการทำงาน: findIndices :: (a -> Bool) -> [a] -> [Int] findIndices _ [] = [] findIndices pred xs = map fst (filter (pred . snd) (zip [0..] xs)) ผลลัพธ์: findIndices (== 0) [1,2,0,3,0] == [2,4]โดยที่ pred คือ (== 0) & xs คือ [1,2,0,3,0] ฉันจะแสดงความเข้าใจของฉัน: (zip [0..] xs) บรรทัดข้างต้นทำอะไรได้บ้างนำดัชนีไปสู่ทุกสิ่งในรายการ สำหรับอินพุตที่ระบุข้างต้นมันจะมีลักษณะดังนี้: …

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
มีกฎอะไรบ้างเกี่ยวกับฟังก์ชัน a -> () ที่ถูกประเมินใน Haskell
เช่นเดียวกับชื่อเรื่อง: สิ่งใดที่รับประกันว่าจะมีการประเมินฟังก์ชั่นการส่งคืนหน่วย Haskell? ใครจะคิดว่าไม่จำเป็นต้องเรียกใช้การประเมินผลใด ๆ ในกรณีเช่นนี้คอมไพเลอร์สามารถแทนที่การเรียกเช่นนั้นทั้งหมดด้วย()ค่าทันทีเว้นแต่จะมีการร้องขออย่างชัดเจนสำหรับความเข้มงวดที่มีอยู่ในกรณีนี้รหัสอาจต้องตัดสินใจว่าควร กลับ()หรือด้านล่าง ฉันได้ทดลองสิ่งนี้ใน GHCi และดูเหมือนว่าสิ่งตรงกันข้ามเกิดขึ้นนั่นคือฟังก์ชั่นดังกล่าวจะได้รับการประเมิน ตัวอย่างดั้งเดิมมากจะเป็น f :: a -> () f _ = undefined การประเมินf 1ข้อผิดพลาดเกิดขึ้นเนื่องจากการปรากฏตัวของundefinedดังนั้นการประเมินผลบางอย่างเกิดขึ้นแน่นอน แม้ว่าจะยังไม่ชัดเจนว่าการประเมินจะเกิดขึ้นในระดับใด ()บางครั้งก็ดูเหมือนจะเป็นไปตามที่ลึกที่สุดเท่าที่มันเป็นสิ่งจำเป็นในการประเมินทุกสายฟังก์ชั่นกลับมา ตัวอย่าง: g :: [a] -> () g [] = () g (_:xs) = g xs รหัสนี้จะวนg (let x = 1:x in x)ซ้ำไปเรื่อย ๆ หากแสดงด้วย แต่แล้ว f …

1
วิธีแยกตัวประกอบความต่อเนื่อง Monad ให้เป็น Adjoints ด้านซ้ายและขวา
เนื่องจากสถานะ monad สามารถแยกเป็นผลิตภัณฑ์ (ซ้าย - Functor) และ Reader (ขวา - แทนได้) มีวิธีในการแยกแยะความต่อเนื่องของ Monad หรือไม่? รหัสด้านล่างคือความพยายามของฉันซึ่งจะไม่ตรวจสอบประเภท -- To form a -> (a -> k) -> k {-# LANGUAGE MultiParamTypeClasses, TypeOperators, InstanceSigs, TypeSynonymInstances #-} type (<-:) o i = i -> o -- I Dont think we can have Functor & Representable …

1
ใช้ Haskell เหมือนโมดูลโหมโรงในโมดูลใน raku
ฉันกำลังเขียนแพคเกจการวาดภาพที่มีบางส่วนและฉันมีโอเปอเรเตอร์และชนิดข้อมูลกระจัดกระจายไปทั่ว อย่างไรก็ตามฉันไม่ต้องการให้ผู้ใช้เพิ่มโมดูลที่เกี่ยวข้องทุกครั้งเนื่องจากมันจะค่อนข้างยุ่งเช่นฉันมีPointชั้นเรียนMonoidบทบาทและStyleชั้นเรียนในเส้นทางที่แตกต่างเช่นนี้ unit module Package::Data::Monoid; # $?FILE = lib/Package/Data/Monoid.pm6 role Monoid {...} unit module Package::Data::Point; # $?FILE = lib/Package/Data/Point.pm6 class Point {...} unit module Package::Data::Style; # $?FILE = lib/Package/Data/Style.pm6 class Style {...} ฉันอยากจะมีhaskellโหมโรงทำนองหนึ่งlib/Package/Prelude.pm6 พร้อมเอฟเฟกต์ที่ฉันสามารถเขียนสคริปต์ได้ use Package::Prelude; # I can use Point right away, Style etc... แทนที่จะทำ use Package::Data::Style; use Package::Data::Point; …
11 haskell  raku 

1
พิมพ์บทบาทและพฤติกรรมที่ทำให้เกิดความสับสนโดย `coerce '
ฉันมีชนิดId aและฉันพยายามที่จะป้องกันไม่ให้ตั้งใจบีบบังคับเช่นการไปยังId DoubleId Int หากฉันเข้าใจบทบาทพิมพ์อย่างถูกต้องสิ่งต่อไปนี้ไม่ควรรวบรวม {-# LANGUAGE RoleAnnotations #-} import Data.Coerce (coerce) type role Id nominal newtype Id a = Id String badKey :: Id Int badKey = coerce (Id "I point to a Double" :: Id Double) น่าเสียดายที่มัน: Prelude> :load Id.hs [1 of 1] Compiling Main ( Id.hs, interpreted …
11 haskell  roles  coerce 

2
การสรุปรายการระดับความซ้อนโดยพลการใน F #
ฉันกำลังพยายามสร้างฟังก์ชัน F # ที่จะส่งคืนผลรวมของรายการintของการซ้อนกันโดยพลการ กล่าวคือ มันจะทำงานให้list<int>เป็นและlist<list<int>>list<list<list<list<list<list<int>>>>>> ใน Haskell ฉันจะเขียนสิ่งที่ชอบ: class HasSum a where getSum :: a -> Integer instance HasSum Integer where getSum = id instance HasSum a => HasSum [a] where getSum = sum . map getSum ซึ่งจะให้ฉันทำ: list :: a -> [a] list = replicate 6 nestedList :: …
10 haskell  f# 

2
ชี้แจงเกี่ยวกับประเภทที่มีอยู่ใน Haskell
ฉันพยายามที่จะเข้าใจประเภท Existential ใน Haskell และเจอ PDF http://www.ii.uni.wroc.pl/~dabi/courses/ZPF15/rlasocha/prezentacja.pdf โปรดแก้ไขความเข้าใจด้านล่างที่ฉันมีจนถึงตอนนี้ ประเภทที่มีอยู่ดูเหมือนจะไม่สนใจในประเภทที่มีอยู่ แต่การจับคู่รูปแบบพวกเขาบอกว่ามีประเภทบางประเภทที่เราไม่ทราบว่าเป็นประเภทใดจนกระทั่งถึง & ยกเว้นว่าเราใช้ Typeable หรือ Data เราใช้มันเมื่อเราต้องการซ่อนประเภท (เช่น: สำหรับรายการที่ต่างกัน) หรือเราไม่ทราบว่าประเภทใดในเวลารวบรวม GADT's ให้ไวยากรณ์ที่ชัดเจนและดีกว่าที่จะใช้รหัสประเภทอัตถิภาวนิยมโดยการให้นัยforall' s ข้อสงสัยของฉัน ในหน้า 20 ของ PDF ข้างต้นมีการกล่าวถึงสำหรับโค้ดด้านล่างว่าเป็นไปไม่ได้ที่ Function ต้องการบัฟเฟอร์เฉพาะ ทำไมถึงเป็นเช่นนั้น เมื่อฉันร่างฟังก์ชั่นฉันรู้ว่าบัฟเฟอร์ชนิดใดฉันจะใช้แม้จะไม่รู้ว่าข้อมูลที่ฉันจะใส่เข้าไปนั้น มีอะไรผิดปกติในการมี:: Worker MemoryBuffer Intถ้าพวกเขาต้องการที่จะทำให้นามธรรมเหนือบัฟเฟอร์พวกเขาสามารถมีประเภท Sum data Buffer = MemoryBuffer | NetBuffer | RandomBufferและมีประเภทเช่น:: Worker Buffer Int data Worker …

1
Ord ที่สืบทอดมาพร้อมกับข้อ จำกัด เชิงปริมาณ (forall a. Ord a => Ord (fa))
ด้วยข้อ จำกัด เชิงปริมาณฉันสามารถหามาใช้ได้Eq (A f)หรือไม่ อย่างไรก็ตามเมื่อฉันพยายามหา Ord (A f) มันล้มเหลว ฉันไม่เข้าใจวิธีใช้ข้อ จำกัด เชิงปริมาณเมื่อคลาสข้อ จำกัด มีซูเปอร์คลาส ฉันจะดูOrd (A f)คลาสอื่นที่มีซูเปอร์คลาสได้อย่างไร > newtype A f = A (f Int) > deriving instance (forall a. Eq a => Eq (f a)) => Eq (A f) > deriving instance (forall a. Ord a => Ord …

1
ทำไมฟังก์ชั่นวงเล็บปีกกาของ Haskell จึงใช้งานได้ใน executables แต่ล้มเหลวในการทำความสะอาดในการทดสอบ?
ฉันเห็นพฤติกรรมแปลก ๆ ที่bracketหน้าที่ของ Haskell ทำงานแตกต่างกันไปขึ้นอยู่กับว่ามีการใช้stack runหรือstack testไม่ พิจารณารหัสต่อไปนี้โดยใช้วงเล็บสองอันซ้อนกันเพื่อสร้างและทำความสะอาดคอนเทนเนอร์ Docker: module Main where import Control.Concurrent import Control.Exception import System.Process main :: IO () main = do bracket (callProcess "docker" ["run", "-d", "--name", "container1", "registry:2"]) (\() -> do putStrLn "Outer release" callProcess "docker" ["rm", "-f", "container1"] putStrLn "Done with outer release" ) …

1
มีวิธีที่สะดวกในการใช้รูปแบบเป็นฟังก์ชันเพรดิเคตหรือไม่
เมื่อเร็ว ๆ นี้ฉันได้พบกับสถานการณ์ที่ฉันต้องการส่งผ่านฟังก์ชันเพรดิเคตไปยังฟังก์ชั่นอื่นและบ่อยครั้งที่ตรรกะที่ฉันกำลังค้นหาคือ "ค่านี้ตรงกับรูปแบบนี้หรือไม่" การจับคู่รูปแบบดูเหมือนจะเป็นที่ต้องการในการประกาศdoบล็อกและรายการความเข้าใจ แต่มีฟังก์ชันจำนวนมากที่ใช้คำกริยาa -> Boolซึ่งเป็นประโยชน์อย่างมากหากผ่านไปในรูปแบบ ตัวอย่างเช่นtakeWhile, until, find, spanฯลฯ จนถึงขณะนี้ฉันได้ทำ\a -> case a of MyCons _ -> True; otherwise -> Falseหรือเขียนฟังก์ชั่นที่มีชื่อ la let myPred (MyCons _) = True; myPred _ = False inแต่พวกเขาทั้งสองดูเหมือนน่าเกลียดชะมัดและไม่สำนวนมาก วิธี "ชัดเจน" (และผิด) จะเป็นสิ่งที่ชอบ\(MyCons _) -> Trueแต่นั่นทำให้เกิดข้อผิดพลาดในการเป็นบางส่วนโดยธรรมชาติและถึงแม้จะรู้สึกว่าต้องมีวิธีที่สะอาดกว่า มีวิธีรวบรัด / สะอาดกว่านี้ในการทำสิ่งนี้หรือไม่? หรือฉันจะทำสิ่งต่าง ๆ โดยสิ้นเชิงผิด?
10 haskell 

1
การสร้างการต่อข้อมูลที่สัมพันธ์กันอย่างสมบูรณ์
ความจริงที่ดีเกี่ยวกับการต่อเรียงคือถ้าฉันรู้ว่ามีสองตัวแปรในสมการ: a ++ b = c จากนั้นฉันก็รู้สาม ฉันต้องการที่จะจับภาพความคิดนี้ใน concat ของตัวเองดังนั้นฉันจึงใช้การพึ่งพาการทำงาน {-# Language DataKinds, GADTs, FlexibleContexts, FlexibleInstances, FunctionalDependencies, KindSignatures, PolyKinds, TypeOperators, UndecidableInstances #-} import Data.Kind (Type) class Concatable (m :: k -> Type) (as :: k) (bs :: k) (cs :: k) | as bs -> cs , as cs -> …

4
ทำความเข้าใจเกี่ยวกับฟังก์ชั่นบริสุทธิ์และผลข้างเคียงใน Haskell - putStrLn
เมื่อเร็ว ๆ นี้ฉันเริ่มเรียนรู้ Haskell เพราะฉันต้องการที่จะขยายความรู้ของฉันในการเขียนโปรแกรมฟังก์ชั่นและฉันต้องบอกว่าฉันรักมันจริงๆ ทรัพยากรที่ฉันใช้อยู่ในขณะนี้คือ 'Haskell Fundamentals Part 1' บน Pluralsight น่าเสียดายที่ฉันมีปัญหาในการทำความเข้าใจคำพูดหนึ่งของอาจารย์ผู้สอนเกี่ยวกับรหัสต่อไปนี้และหวังว่าพวกคุณจะเข้าใจในหัวข้อนี้ รหัสที่มาพร้อมกับ helloWorld :: IO () helloWorld = putStrLn "Hello World" main :: IO () main = do helloWorld helloWorld helloWorld อ้าง หากคุณมีการกระทำ IO เดียวกันหลายครั้งใน do-block มันจะถูกเรียกใช้หลายครั้ง ดังนั้นโปรแกรมนี้พิมพ์สตริง 'Hello World' สามครั้ง ตัวอย่างนี้ช่วยอธิบายว่าputStrLnไม่ใช่ฟังก์ชันที่มีผลข้างเคียง เราเรียกใช้putStrLnฟังก์ชันหนึ่งครั้งเพื่อกำหนดhelloWorldตัวแปร หากputStrLnมีผลข้างเคียงของการพิมพ์สตริงมันจะพิมพ์เพียงครั้งเดียวและhelloWorldตัวแปรซ้ำใน do-block หลักจะไม่มีผลกระทบใด ๆ ในภาษาโปรแกรมอื่น …
10 haskell 

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