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中用於定義類型的關鍵字。該行現在是一個語法錯誤。 –