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/