2012-01-19 6 views
3

私はhttp://www.haskell.org/haskellwiki/Hitchhikers_guide_to_Haskellのコードに従っていましたが、コード(第2章の)はエラーです。チュートリアルに記載されている著者名/電子メールはありませんので、私はアドバイスのためにここに来ています。コードは以下の通りで、 "eof"という単語にエラーがあります。haskelwikiチュートリアルのparsecエラー

module Main where 

import Text.ParserCombinators.Parsec 

parseInput = 
    do dirs <- many dirAndSize 
    eof 
    return dirs 

data Dir = Dir Int String deriving Show 

dirAndSize = 
    do size <- many1 digit 
    spaces 
    dir_name <- anyChar `manyTill` newline 
    return (Dir (read size) dir_name) 

main = do 
    input <- getContents 
    putStrLn ("Debug: got inputs: " ++ input) 

答えて

4

このチュートリアルは、parsecがシンプルだった昔、書かれていました。現在、parsec-3以降、ライブラリはモナドをラップすることができるので、ある時点で使用する型を指定する必要があります(そうでなければ、あいまいさを解消する必要があります)。これはそのうちの1つで、eofなどです。式タイプシグニチャeof :: Parser()がコンパイルされます。

+0

ありがとうございました。また、MainからparseInputを呼び出すと、コンテキストが設定されます。上の例では、コードが構築されていて、Mainコードは以前のバージョンからのものであり、parseInputを呼び出さなかったものです。メインコードセグメントを次のセクションから改訂すると、それは機能しました。 – R71