[英]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
當我僅獲得第一個元素但我希望對對列表中的所有元素都這樣做時,它可以工作。 當我寫g <-xi時,無法將期望的類型'IO t0'與實際類型[[([[Integer]],[[Integer]])]相匹配
您在此處的IO Monad內部,因此,每次編寫“綁定”箭頭<-
,右側的內容都必須是IO操作。 因此,簡短的答案是,您不想在值x
上使用<-
。
現在,您似乎想為列表的每個元素而不是單個元素調用print_matrix。 在那種情況下,我認為Macke處於正確的軌道,但是我將改用mapM_:
mapM_ (putStr . print_matrix . fst) x
應該可以。
原因是您明確地說要一次將每個元素放置在putStr
,但是您並不關心putStr
本身的結果。
聽起來mapM可能適合您的要求: Monad a => (b -> ac) -> [b] -> a [c]
它用於將monadic函數應用於列表,並在monad中獲取列表
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.