ファイル全体を文字列に読み込み、関数lines
を使用して文字列の行を取得したいとします。私はこれらのコード行でそれをやろうとしている:Haskellがファイルの行を読み取る
main = do
args <- getArgs
content <- readFile (args !! 0)
linesOfFiles <- lines content
しかし、私はそれが失敗した広告コンパイルして、次のエラーを取得しています:私はreadFile
の結果を結合することによって考え
Couldn't match expected type `IO t0' with actual type `[String]'
In the return type of a call of `lines'
In a stmt of a 'do' block: linesOfFiles <- lines content
を内容はString
データ型になります。それはなぜですか?
さらに、これを完全性のためにgetArgsおよびreadFileの型と比較してください。 –
このソリューションはどのように機能しますか? 'lines'の型が' String - > [String] 'で、' content'の型が 'IO String'であるため' content'を 'lines'に渡すことはできません – imkendal
@kjhいいえ、' content'はa 'String'。 'readFile(args !! 0)'の型は 'IO String'で、' content'をその 'IO'アクションの" result "に束縛します。構造体 'do {a < - action;もの; } ''アクション '= \ a - > stuff'に' 'desugars''、' 'アクション' 'が' 'IO''型の場合、' a'は 't'型です。 –