- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
mapM putStrLn ["a", "b"] a b [(),()] Prelude> mapM_ putStrLn ["a", "b"] a b 为什么第一个版本显示第三行而第-6ren">
Prelude> mapM putStrLn ["a", "b"]
a
b
[(),()]
Prelude> mapM_ putStrLn ["a", "b"]
a
b
最佳答案
如果你把 mapM
独立程序中的版本,使用 ghc
编译它,然后运行它,你也不会从中得到第三行:
$ cat demo.hs
main = mapM putStrLn [ "a", "b" ]
$ ghc demo.hs
$ ./demo
a
b
$
[(),()]
您在
ghci
中看到只是
mapM
的返回值称呼;
ghci
自动显示您输入的每个表达式的值。 (这就是为什么
ghci
被称为读取-评估-打印循环,或 REPL;“打印”部分就是您在这里看到的。)
mapM
创建一个包含每个
putStrLn
的返回值的列表调用(因此对于列表中的每个元素,您会得到一个
()
),
mapM_
丢弃那些返回值并返回
IO ()
, 其中
ghci
懒得显示。所以你没有看到来自
ghci
的额外行在这种情况下。
关于haskell - mapM putStrLn ["a", "b"] 为什么它显示三行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13297661/
假设,我在使用 IO 时得到了大量的项目列表: as IO b转至 as : as (a -> m b) -> [a] -> m [b] ,这就是我在类型匹配方面所需要的。但它会在内存中构建所有链
给定返回 m (Maybe a) 的操作列表我正在尝试返回 m (Maybe [a])如果任何单个结果是 Nothing整个结果是 Nothing . m包含 StateT我想避免在第一个 Nothi
考虑以下简单的 IO 函数: req :: IO [Integer] req = do print "x" return [1,2,3] 实际上,这可能是一个 http 请求,它在解析结果后返
在我最近的 work与 Gibbs sampling ,我一直在充分利用 RVar 在我看来,它为随机数生成提供了一个近乎理想的接口(interface)。遗憾的是,由于无法在 map 中使用 mon
考虑以下 Haskell 语句: mapM print ["1", "2", "3"] 实际上,这会按顺序打印“1”、“2”和“3”。 问题:你怎么知道mapM会先打印“1”,然后打印“2”,最后打印
据我了解forM与 mapM 相同,只有论点被颠倒。 这是否意味着我可以替换每个 forM与 mapM反之,如果我颠倒我给他们的论点? 最佳答案 的确。 forM是 literally只是... fo
更新:好的,这个问题可能变得非常简单。 q Rand g (Double, [Double]) f = do b Rand g a -> Rand g a splitRandom code
在交互模式下使用 mapM 时:调用 mapM putStrLn ["random","Text"]输出是 random text [(),()] 然而,当我从脚本调用相同的函数然后运行脚本时: ma
Prelude> mapM putStrLn ["a", "b"] a b [(),()] Prelude> mapM_ putStrLn ["a", "b"] a b 为什么第一个版本显示第三行而第
考虑以下示例: safeMapM f xs = safeMapM' xs [] where safeMapM' [] acc = return $ reverse acc
在交互模式下使用 mapM 时:调用 mapM putStrLn ["random","Text"]输出是 random text [(),()] 然而,当我从脚本调用相同的函数然后运行脚本时: ma
我正在查看 Real World Haskell 的 I/O 章节。书中另外 7 章没有讨论 Monad。也就是说,我对 I/O 的理解充其量是不完整的。 现在我正在尝试理解mapM函数。据我了解,该
这是一种奇怪的行为,即使对 Haskell 来说也是如此。看下面的代码段: import System.Directory import System.FilePath -- This spins i
我在 Haskell 中编写了一个非常简单的两遍汇编程序,我遇到了一个我还没有经验来解决的场景。我认为解决方案很可能涉及单子(monad)变压器,我不太了解。 汇编器将汇编代码解析为 Statemen
我的应用程序需要在运行时打开多个资源。我通过映射 openFile 来实现这一点一次在应用程序的开始。 let filePaths = ["/dev/ttyUSB0", "/dev/ttyUSB1",
我最近需要以下功能。这个想法是拉上原来的xs值以及 mapM f xs值。 zipMapM f xs = fmap (zip xs) (mapM f xs) 把它通过pointfree,我得到了什么,
由于我一直在寻找优化我一直在制作的密码破解程序的方法,我遇到了一个列表中所有可能的字符组合的更短的实现,它使用了这个函数: mapM (const xs) [1..n] 哪里xs可能是可用的字符,和
cats 是否提供了与 Haskell 中的 mapM 等效的功能?它应该看起来像: def mapM[A, B, F[_], Col[_]] (col: Col[A])(f: A => F[
我正在想办法结合traverseOf与 >>=以这样的方式允许以下内容。 TLDR;普通 Haskell 中的一个简单示例如下所示,但使用数据结构深处的透镜。 λ> fmap concat $ map
ByteString 有标准(纯) map 函数和 Text : map :: (Word8 -> Word8) -> ByteString -> ByteString map :: (Char ->
我是一名优秀的程序员,十分优秀!