compute fp = do
text <- readFile fp
let (a,b) = sth text
let x = data b
--g <- x
putStr $ print_matrix $ fst $ head $ x
当我只得到第一个元素时,它可以工作,但我想对对列表中的所有元素执行此操作。 当我写g&lt; - x我得到了无法匹配的预期类型`IO t0' 实际类型[([[Integer]],[[Integer]])]
答案 0 :(得分:3)
你在IO Monad里面,所以每当你写一个“绑定”箭头<-
时,右边的东西必须是IO操作。简而言之,您不希望在值<-
上使用x
。
现在,您似乎想要为列表的每个元素而不是单个元素调用print_matrix。在那种情况下,我认为Macke走在正确的轨道上,但我会改用mapM_:
mapM_ (putStr . print_matrix . fst) x
应该做的伎俩。
原因是你明确表示你想要{{1}}每个元素,一次一个,但你不关心putStr
本身的结果。
答案 1 :(得分:2)
听起来mapM可能适合您的帐单:Monad a => (b -> a c) -> [b] -> a [c]
它用于将monadic函数应用于列表,并在monad中获取列表