Haskell 单子(monad) IO

标签 haskell types io monads

compute fp = do
    text <- readFile fp
    let (a,b) = sth text
    let x = data b 
    --g <- x
    putStr $ print_matrix $ fst $ head $ x

当我只获得第一个元素但我想对列表中的所有元素执行此操作时,它会起作用。 当我写 g<- x 时,我得到无法匹配预期类型“IO t0” 实际类型 [([[Integer]], [[Integer]])]

最佳答案

你在这里的 IO Monad 内部,所以任何时候你写一个“绑定(bind)”箭头 <- ,右边的东西一定是IO操作。所以简短的答案是,您不想使用 <-关于值 x .

现在,您似乎想要为列表中的每个元素而不是单个元素调用 print_matrix。在这种情况下,我认为 Macke 走在正确的轨道上,但我会使用 mapM_ 代替:

mapM_ (putStr . print_matrix . fst) x

应该可以解决问题。

原因是您明确表示您想要 putStr每个元素,一次一个,但您不关心 putStr 的结果本身。

关于Haskell 单子(monad) IO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6398765/

相关文章:

scala - 用于转换为并行集合的通用类型参数

c - 用C打开文件时出现段错误

haskell - 使用 parsec 获取已解析源中的当前位置

c# - 约束 System.Type 作为类型安全的通用参数

haskell - 在 Haskell 中使用标准

sql - 为什么 nvarchar 的默认大小是 255 (MSSQL Server)?

python - 文件上的第二个文件处理程序行为异常

c - 代码没有打印出预期的输出,为什么?

haskell - 在 Haskell 中编辑/更新图表

haskell - 如何使用 Haskell 对列表中的相似项目进行分组?