簡體   English   中英

Haskell monadic IO

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM