我正在尝试用parsec解析一些Text:
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
Run Code Online (Sandbox Code Playgroud)
我希望choice尝试匹配"离开",如果失败,则尝试"登录"等.但它只会尝试匹配"离开",如果失败,则会出错.
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"
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?