monad-transformers

    6熱度

    1回答

    我正在查看the documentation的Reader monad和ReaderT單體變壓器。 相關的定義是: newtype ReaderT k r m a :: forall k. * -> (k -> *) -> k -> * type Reader r = ReaderT * r Identity 我不明白什麼*中的定義都在做。特別是我試圖從ReaderT中派生出一個新的mona

    2熱度

    1回答

    我試圖將一個(ExceptT Error IO Foo)「semilift」到一個(ExceptT Error (StateT Bar IO) Baz)。 我試過lift,fmap lift和fmap return,沒有工作;這裏有一個標準成語嗎? > import Control.Monad.Except > import Control.Monad.State > data Error

    3熱度

    1回答

    我正在寫一些代碼(圍繞卡片播放策略),它們一起使用State和遞歸。也許這部分實際上並不需要(它對我來說已經覺得笨拙,即使作爲一個相對的初學者),但也有其他部分可能這樣做,我的一般問題站在... 我最初的幼稚實現是完全確定性(投標的選擇僅僅是由功能validBids提供的第一個選項): bidOnRound :: (DealerRules d) => d -> NumCards -> State

    3熱度

    1回答

    我在學習Haskell。我試圖編寫一個包含「全局狀態」的程序:Vars。每次調用函數時,我都想更改狀態的一個組成部分(例如var1)。該變化可以是對組件的簡單功能(例如+4)。此外,它還打印出已更改的組件。這是我迄今爲止所做的(但我被卡住了)。編輯:運行代碼後,我想查看最新版本的全局狀態。 import Control.Monad.State import Control.Monad.IO.Cl

    1熱度

    2回答

    我正在研究一個遊戲原型,並試圖儘可能地純粹。 所有用例都放入一個場景 - 試圖找到播放器在存儲 在存儲 執行一些業務邏輯 更新玩家在更新一個能產生一定的輸出 - 日誌消息,轉發到其他播放器等 從另一個側面一個已經拿到進入環境(數據庫,資源等),全球遊戲狀態(不可變的遊戲CONFIGS,種子等等)。 爲了配合它一起我結束了scalaz7 ReaderWriterState單子是這樣的: 一些定義:

    0熱度

    1回答

    我正在創建一個將讀取二進制文件的Conduit。東西可能會出錯,所以我需要一個monad來處理一些錯誤;現在Maybe已經足夠了。 我想使用sourceFile,它要求管道monad是MonadResource,這是問題的關鍵。 我從the docs看到,例如, MaybeT m有一個實例,但它需要m已經是MonadResource;事實上,所有情況都是如此。由於我的理解有限,這聽起來像雞與雞蛋,

    6熱度

    2回答

    我正在學習monad變壓器,我很困惑什麼時候使用電梯是必要的。 假設我有以下代碼(它沒有做任何有趣的事情,只是我可以用來演示的最簡單的東西)。 foo :: Int -> State Int Int foo x = do (`runContT` pure) $ do callCC $ \exit -> do when (odd x) $ do -- l

    1熱度

    2回答

    給定一個mtl monad堆棧,例如, ExceptT String (WriterT String (State s a)),我如何評估內部狀態monad而不需要拆開外層monad? have :: ExceptT String (WriterT String (State s)) a f :: State s a -> a want :: ExceptT String (WriterT

    4熱度

    2回答

    給出以下類型和功能,這意味着到CSV字段的字段解析爲一個字符串: type Parser resultType = ParsecT String() Identity resultType cell :: Parser String 我有實現以下功能: customCell :: String -> Parser res -> Parser res customCell typeName

    8熱度

    1回答

    我目前正在建設一個新的API,以及它目前提供的功能之一是: inSpan :: Tracer -> Text -> IO a -> IO a 我期待的是Tracer進入一個單子,讓我簽名更像 inSpan :: MonadTracer m => Text -> m a -> m a 的inSpan實現使用bracket,這意味着我有兩個主要選擇: class MonadUnliftIO m