2011-06-18 7 views
2
compute fp = do 
    text <- readFile fp 
    let (a,b) = sth text 
    let x = data b 
    --g <- x 
    putStr $ print_matrix $ fst $ head $ x 

最初の要素しか得られませんが、これはペアのリストのすべての要素に対して行います。 私はグラム<を書く - xiがmapMがあなたの法案に合うかもしれないようですね[([[整数]]、[[整数]])]ハスケルモナディックIO

+1

'let x = data b'私は混乱しています。 'data'は型を定義するためのHaskellのキーワードです。その行は構文エラーです。 –

答えて

3

モナドでは、リストに単項関数を適用し、バックリストを取得するために使用されますMonad a => (b -> a c) -> [b] -> a [c]

、右側のものはIO操作でなければなりません。したがって、短い答えは、x<-を使用したくないということです。

ここでは、単一の要素ではなくリストの各要素に対してprint_matrixを呼び出すように見えます。その場合、Mackeは正しかったと思いますが、代わりにmapM_を使用します。

は、このトリックを行う必要があります。

なぜなら、あなたはputStr各要素を一度に1つずつ欲しいと明示しているからですが、putStrの結果は気にしません。

2

実際の型と予想タイプ `IO t0' の と一致しませんでしたしまいました:あなたがここにIOモナドの中にいるので、あなたは「バインド」を書き込む任意の時間が<-矢印

+0

thxそれは偉大な作品です – XYZ

+0

@XYZ:喜んで助ける!ここでは、緑の矢印をクリックして問題を解決するのに役立つ回答を「受け入れる」必要があることに注意してください。 (そしてすべての回答をアップして助けてください。) – Macke