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

monad ในการเขียนโปรแกรมคือคำอธิบายการคำนวณแบบประกอบ Monads เป็นโครงสร้างที่สำคัญในภาษาโปรแกรมที่ใช้งานได้เช่น Haskell

5
monad ที่จัดทำดัชนีคืออะไร?
monad ที่จัดทำดัชนีคืออะไรและแรงจูงใจสำหรับ monad นี้? ฉันได้อ่านพบว่าช่วยในการติดตามผลข้างเคียง แต่ลายเซ็นและเอกสารของประเภทไม่ได้นำฉันไปไหน อะไรคือตัวอย่างของวิธีที่สามารถช่วยในการติดตามผลข้างเคียง (หรือตัวอย่างอื่น ๆ ที่ถูกต้อง)
98 haskell  monads 

3
จะเล่นกับ Control.Monad.Writer ใน Haskell ได้อย่างไร?
ฉันยังใหม่กับการเขียนโปรแกรมเชิงฟังก์ชันและเพิ่งเรียนรู้ที่Learn You a Haskellแต่เมื่อฉันอ่านบทนี้ฉันก็ติดอยู่กับโปรแกรมด้านล่าง: import Control.Monad.Writer logNumber :: Int -> Writer [String] Int logNumber x = Writer (x, ["Got number: " ++ show x]) multWithLog :: Writer [String] Int multWithLog = do a <- logNumber 3 b <- logNumber 5 return (a*b) ฉันบันทึกบรรทัดเหล่านี้ในไฟล์. hs แต่ไม่สามารถนำเข้าสู่ ghci ของฉันซึ่งบ่น: more1.hs:4:15: Not in …
97 haskell  monads 

3
ความแตกต่างระหว่าง State, ST, IORef และ MVar
ฉันกำลังทำงานผ่านเขียนเองโครงการใน 48 ชั่วโมง (ฉันถึงประมาณ 85hrs) และผมเคยไปเป็นส่วนหนึ่งเกี่ยวกับการเพิ่มและการกำหนดตัวแปร ในบทนี้มีการกระโดดข้ามแนวความคิดครั้งใหญ่และฉันหวังว่ามันจะทำในสองขั้นตอนโดยมีการปรับโครงสร้างที่ดีระหว่างนั้นแทนที่จะกระโดดตรงไปที่ทางออกสุดท้าย อย่างไรก็ตาม… ผมเคยหายไปด้วยจำนวนของชั้นเรียนที่แตกต่างกันที่ดูเหมือนจะตอบสนองวัตถุประสงค์เดียวกัน: State, ST, และIORef MVarสามข้อแรกถูกกล่าวถึงในข้อความในขณะที่คำถามสุดท้ายน่าจะเป็นคำตอบที่ได้รับความนิยมสำหรับคำถาม StackOverflow จำนวนมากเกี่ยวกับสามข้อแรก พวกเขาทั้งหมดดูเหมือนจะมีสถานะระหว่างการวิงวอนติดต่อกัน สิ่งเหล่านี้คืออะไรและแตกต่างกันอย่างไร? โดยเฉพาะประโยคเหล่านี้ไม่สมเหตุสมผล: แต่เราใช้คุณลักษณะที่เรียกว่าเธรดสถานะโดยให้ Haskell จัดการสถานะรวมให้เรา สิ่งนี้ช่วยให้เราปฏิบัติกับตัวแปรที่เปลี่ยนแปลงได้เหมือนกับที่เราทำในภาษาโปรแกรมอื่น ๆ โดยใช้ฟังก์ชันเพื่อรับหรือตั้งค่าตัวแปร และ โมดูล IORef ช่วยให้คุณสามารถใช้ตัวแปร stateful ภายใน monad ทั้งหมดนี้ทำให้สายtype ENV = IORef [(String, IORef LispVal)]สับสน - ทำไมต้องเป็นครั้งที่สองIORef? อะไรจะพังถ้าฉันจะเขียนtype ENV = State [(String, LispVal)]แทน

3
mtl, หม้อแปลง, monads-fd, monadLib และความขัดแย้งของทางเลือก
Hackage มีหลายแพ็คเกจสำหรับ monad transformers: mtl : ห้องสมุดหม้อแปลง Monad หม้อแปลง : คอนกรีต functor และ monad transformers monads-fd : คลาส Monad โดยใช้การพึ่งพาการทำงาน monads-tf : คลาส Monad โดยใช้ประเภทครอบครัว monadLib : ชุดของหม้อแปลง monad mtl-tf : ไลบรารีหม้อแปลง Monad โดยใช้ตระกูลประเภท mmtl : ไลบรารีหม้อแปลง Modular Monad mtlx : ไลบรารีหม้อแปลง Monad พร้อมดัชนีประเภทให้สำเนา 'ฟรี' compose-trans : หม้อแปลง monad ที่ประกอบได้ …

5
สับสนกับความเข้าใจในการแปลง flatMap / Map
ดูเหมือนฉันจะไม่เข้าใจแผนที่และ FlatMap จริงๆ สิ่งที่ฉันไม่เข้าใจคือความเข้าใจคือลำดับของการเรียกซ้อนไปยังแผนที่และ flatMap อย่างไร ตัวอย่างต่อไปนี้มาจากFunctional Programming ใน Scala def bothMatch(pat:String,pat2:String,s:String):Option[Boolean] = for { f <- mkMatcher(pat) g <- mkMatcher(pat2) } yield f(s) && g(s) แปลเป็น def bothMatch(pat:String,pat2:String,s:String):Option[Boolean] = mkMatcher(pat) flatMap (f => mkMatcher(pat2) map (g => f(s) && g(s))) วิธี mkMatcher ถูกกำหนดไว้ดังนี้: def mkMatcher(pat:String):Option[String => Boolean] = pattern(pat) …

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 …

2
รัฐต่างๆใน Haskell
ฉันกำลังพยายามกำหนดตระกูลของเครื่องสถานะที่มีสถานะแตกต่างกันบ้าง โดยเฉพาะอย่างยิ่งยิ่งเครื่องจักรซับซ้อน "รัฐ" มีสถานะที่เกิดขึ้นจากการรวมรัฐของเครื่องจักรรัฐง่ายขึ้น (สิ่งนี้คล้ายกับการตั้งค่าวัตถุที่วัตถุมีหลายคุณลักษณะที่เป็นวัตถุด้วย) นี่คือตัวอย่างที่เรียบง่ายของสิ่งที่ฉันต้องการบรรลุ data InnerState = MkInnerState { _innerVal :: Int } data OuterState = MkOuterState { _outerTrigger :: Bool, _inner :: InnerState } innerStateFoo :: Monad m => StateT InnerState m Int innerStateFoo = do i <- _innerVal <$> get put $ MkInnerState (i + 1) …

1
ฉันจะทำอย่างไรกับ callCC ที่ไม่สามารถดำเนินการต่อได้
ฉันกำลังต่อสู้กับความเข้าใจ callCC จริงๆ ฉันได้รับพลังแห่งการสานต่อและฉันใช้แนวคิดนี้ในบางโครงการของฉันเพื่อสร้างแนวคิดเจ๋ง ๆ cont :: ((a->r)->r)-> Cont r aแต่ไม่เคยมีฉันต้องการที่จะใช้สิ่งที่มีความสามารถมากกว่า หลังจากใช้แล้วมันสมเหตุสมผลมากว่าทำไมพวกเขาถึงเรียก Cont Cont ว่าเป็นแม่ของ monads ทั้งหมดใช่เลยฉันไม่เข้าใจว่าจะต้องใช้เมื่อไรcallCCและนั่นคือคำถามของฉัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.