do-notation

    4熱度

    1回答

    所以我有這行代碼: [Nothing] >>= \(Just x) -> [x] 當然這給了異常,因爲模式不匹配沒什麼。 在另一方面,該代碼給出了不同的結果,[]: do Just x <- [Nothing] return x 在我看來,他們應該產生相同的結果,因爲做塊應該被脫到使用(>> =)並返回。但事實並非如此,使得符號是一個特徵而不是語法糖。 我知道單子類型類

    0熱度

    1回答

    望着這ZeroMQ HelloWorldClient.hs代碼片段: forM_ [1..10] $ \i -> do liftIO . putStrLn $ "Sending Hello " ++ show i ++ "…" send requester [] "Hello" _ <- receive requester liftIO . putStrLn

    6熱度

    1回答

    在閱讀的Haskell維基教科書約MonadPlus,我發現了以下功能基本上取Char和String並返回Just (char,tail)如果這種炭等於所述線接頭,或Nothing否則: char :: Char -> String -> Maybe (Char, String) char c s = do let (c':s') = s if c == c' then Ju

    0熱度

    2回答

    我試圖從使用符號的函數返回一個Maybe值,但我似乎無法讓它工作。這個函數的字符串(「文件名」),並在搜索路徑... findIn :: String -> Path -> Maybe Path findIn search start = do file <- ls start if ((filename file) == search) then Just fi

    2熱度

    1回答

    我一直在elixir中使用「do/end」符號,或者像命令塊分隔符那樣。 (換句話說,do類似於C語言的{,end就像})。 這是發生了什麼事情的準確描述?還是更像Haskell do表示法,它構造了monad的語法糖,允許編寫命令式編碼?

    4熱度

    2回答

    我有這種類型的工作,基本上是Kleisli箭頭: {-# language DeriveFunctor #-} data Plan m i o = Plan (i -> m o) deriving Functor instance (Monad m) => Applicative (Plan m i) where pure x = Plan (\_ -> pure x)

    3熱度

    2回答

    所以我想明白Haskell do表示法的工作原理。 我知道它與單子一起使用,它基本上擴展(因爲它實際上是語法糖)到與綁定(>>=)或(>>)連接的匿名函數中,如https://en.wikibooks.org/wiki/Haskell/Syntactic_sugar#Do_notation所示。 然而我的問題是爲什麼下面的命令 Prelude> do [1, 2, 3]; "hello" 回報

    1熱度

    1回答

    閱讀關於現實世界中單子的章節Haskell。我遇到了符號的解除,特別是當我們有像pattern <- action之類的東西時。 -- file: ch14/Do.hs doNotation3 = do pattern <- act1 act2 {- ... etc. -} actN 上面的例子是脫到: -- file: ch14/Do.hs tra

    2熱度

    3回答

    我在混合符號裏面使用純函數和monadic函數時遇到了困難。我有這種感覺,我失去了一些明顯的東西。 例如,說我有這些功能 fa :: a -> IO b fb :: b -> c fc :: c -> IO d z :: a -> IO c z a = do x <- fa a y <- fb x z <- fc y return z 這並不是因爲

    1熱度

    2回答

    我嘗試在第8章中運行關於Graham Hutton的「Programming in Haskell」中的函數解析器的片段,這兩個片段都在ghci和frege-repl中。 我無法使用do語法對語法分析器進行排序。 我有以下弗雷格(Haskell的版本,不同之處僅簡單item定義中不打包和解包String和Char,是一樣的,在書)定義: module Parser where type Pars