Выбор Haskell Text.Parsec.Combinator не отменяется

Я пытаюсь проанализировать некоторый текст с помощью parsec:

data Cmd = LoginCmd String
         | JoinCmd String
         | LeaveCmd String
    deriving (Show)

singleparam :: Parser Cmd
singleparam = do
    cmd <- choice [string "leave", string "login", string "join"]
    spaces
    nick <- many1 anyChar
    eof
    return $ LoginCmd nick

Я ожидаю, что optionпопытается сопоставить «leave», и если это не удастся, потом попробуй "войти" и т.д. Но он только пытается сопоставить "выйти", а если не получается, то выдает ошибку.

ghci> parseTest singleparam (pack "login asdf")
parse error at (line 1, column 1):
unexpected "o"
expecting "leave"
ghci> parseTest singleparam (pack "leave asdf")
LoginCmd "asdf"

Что я делаю не так?

9
задан sinan 2 April 2012 в 12:25
поделиться