monad-transformers

    1熱度

    3回答

    今天在編碼道場工作裏面我嘗試以下 example :: IO() example = do input <- getLine parsed <- parseOnly parser input ... 其中parseOnly :: Parser a -> Either String a(從attoparsec)課程的編譯器抱怨Either ..不IO ..本質告訴我

    2熱度

    2回答

    我已經問了這個問題here,但我想我會嘗試這樣做。 如何將MonadLogger添加到這個免費的monad變壓器堆棧中? newtype Craft a = Craft { unCraft :: ReaderT CraftEnv (FreeT CraftDSL IO) a } deriving (Functor, Monad, MonadIO, Applicative ,

    0熱度

    1回答

    我有這段代碼: import Data.Random import Control.Monad.State foo :: s -> StateT s RVar() foo s = do p <- lift $ (uniform 0 1 :: RVar Double) if p > 0.5 then put s else return() 而且我想重構其簽名是形式:

    1熱度

    1回答

    的概念,這種一元計算我描述了以下計算: import Control.Monad.State import Control.Monad.Identity import Control.Monad.Random.Class -- * fair coin fair :: MonadRandom m => m Bool fair = (\p -> p <= 0.5) <$> getRando

    5熱度

    1回答

    真實世界哈斯克爾指出"Transformer stacking order is important"。但是,我似乎無法弄清楚ExceptT (ResourceT m) a和ResourceT (ExceptT m) a之間是否有區別。他們會互相干擾嗎?

    3熱度

    1回答

    我正在嘗試使用Scalaz EitherT與scala.concurrent.Future。當試圖用它換理解: import scalaz._ import Scalaz._ val et1:EitherT[Future, String, Int] = EitherT(Future.successful(1.right)) val et2:EitherT[Future, String,

    4熱度

    1回答

    我試圖弄清楚如何爲Foo類型實現一個MonadBaseControl實例,它是一個圍繞StateT實例的新類型包裝器。你會認爲它會像this一樣實施,但似乎並非如此。我假設狀態片在這裏引起了問題,那麼是否有辦法放棄它? 代碼: newtype Foo a = Foo { unFoo :: StateT Int IO a } deriving (Monad, Applicative,

    2熱度

    2回答

    我正在寫一個增長很大的管道,並帶有嵌套monad變換。將lift的每個yield或await調用到基地conduitM是一項繁瑣的工作。更不用說每次添加或撤消一層轉換時,我需要在每個可能的位置更改lift的數量。 我一直在尋找類似的功能liftIO,但不是提升了IO操作應該解除yield或await到基於ConduitM任意變換單子,但我似乎無法找到一個。有沒有辦法實現這樣的事情? 編輯:響應@

    0熱度

    2回答

    我與一些嵌套Stream s工作,並想與他們使用的理解語法: def handleNestedStream(as : Stream[A]) : Stream[(A, B)] = { a <- as b <- makeBs(a) } yield (a, b) 然而,makeBs函數返回一個Option[Stream[B]]。我想Option自動解包。另外,如果makeBs失

    6熱度

    1回答

    比方說,我有這樣的(可以說是誤導)周圍鋪設的一段代碼: import System.Environment (getArgs) import Control.Monad.Except parseArgs :: ExceptT String IO User parseArgs = do args <- lift getArgs case safeHead arg