Я пытаюсь проанализировать некоторый текст с помощью 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"
Что я делаю не так?