do-notation

    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

    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" 回报