compute fp = do
text <- readFile fp
let (a,b) = sth text
let x = data b
--g <- x
putStr $ print_matrix $ fst $ head $ x
它工作时,我只得到第一个元素,但我想做这对列表上的所有元素。 当我写摹< - 喜有无法比拟预期的类型`IO T0' 与实际类型[([整数],[[整数]])]Haskell monadic IO
compute fp = do
text <- readFile fp
let (a,b) = sth text
let x = data b
--g <- x
putStr $ print_matrix $ fst $ head $ x
它工作时,我只得到第一个元素,但我想做这对列表上的所有元素。 当我写摹< - 喜有无法比拟预期的类型`IO T0' 与实际类型[([整数],[[整数]])]Haskell monadic IO
你是IO单子这里里面,所以任何时候你写了一个“绑定”箭头<-
,右边的东西必须是IO操作。所以简短的回答是,你不想在价值x
上使用<-
。
现在,它看起来像你想调用列表中的每个元素而不是单个元素的print_matrix。在这种情况下,我认为是马科在正确的轨道上,但我会用mapM_代替:
mapM_ (putStr . print_matrix . fst) x
应该做的伎俩。
原因是您明确表示您想要每个元素putStr
一次一个,但您不关心putStr
本身的结果。
'let x = data b'我很困惑。 'data'是Haskell中用于定义类型的关键字。该行现在是一个语法错误。 –