2017-03-07 2 views
1

私はmegaparsecの小さなパーサ書いた:megaparsecの結果と一致させるには?

scとシンボルと semiParserはチュートリアルからです
module App (main) where 

import Control.Monad (void) 
import Text.Megaparsec 
import Text.Megaparsec.String 
import qualified Text.Megaparsec.Lexer as L 

sc :: Parser() 
sc = L.space (void spaceChar) lineCmnt blockCmnt 
    where lineCmnt = L.skipLineComment "//" 
     blockCmnt = L.skipBlockComment "/*" "*/" 

symbol :: String -> Parser String 
symbol = L.symbol sc 

semiParser :: Parser String 
semiParser = symbol ";" 

main :: IO() 
main = do 
    input <- getLine 
    case parse semiParser input of 
    Left val -> putStrLn $ "Failed! " 
    Right val -> putStrLn $ "Passed! " 
    print "Done" 

を。今、私は私の結果で作業したいと思いますが、私は型エラーを取得:

App.hs:23:5: error: 
    • Couldn't match expected type ‘String 
            -> Either (ParseError (Token String) Dec) String’ 
        with actual type ‘Either t0 t1’ 
    • In the pattern: Left val 
     In a case alternative: Left val -> putStrLn $ "Failed! " 
     In a stmt of a 'do' block: 
     case parse semiParser input of { 
      Left val -> putStrLn $ "Failed! " 
      Right val -> putStrLn $ "Passed! " } 

App.hs:24:5: error: 
    • Couldn't match expected type ‘String 
            -> Either (ParseError (Token String) Dec) String’ 
        with actual type ‘Either t2 t3’ 
    • In the pattern: Right val 
     In a case alternative: Right val -> putStrLn $ "Passed! " 
     In a stmt of a 'do' block: 
     case parse semiParser input of { 
      Left val -> putStrLn $ "Failed! " 
      Right val -> putStrLn $ "Passed! " } 

だから、私の質問は:失敗した構文解析あればどのように私は、String -> Either (ParseError (Token String) Dec) String照合し、エラーメッセージまたは結果を得るのですか?

この質問の一般的な形は次のとおりです。パターンマッチングはどのように機能しますか?そして私はモナドの結果をどのようにバインドすることができるのか一般的には混乱しています(IOのような別のモナドのEitherなど)(私はパターンマッチングしてからモナドのコンテキストに値を持ち上げなければならないと思います)

答えて

0
parse :: Stream s Identity t => Parsec s() a -> SourceName -> s -> Either ParseError a 
               -- ^^^^^^^^^^ -- 

あなたはその引数を忘れてしまったヘッド::今

case parse semiParser "input name here" input of 
+0

を ''試してみてください - 。> TABLE'' –

関連する問題