我在這裏有一些代碼,用於解析URI路徑到一個字符串列表。例如,/user/home
將變爲["user", "home"]
。Haskell Parsec:撤消失敗的許多
pathPiece :: Parser String
pathPiece = do
char '/'
path <- many1 urlBaseChar
return path
uriPath :: Parser [String]
uriPath = do
pieces <- many pathPiece
try $ char '/'
return pieces
parseUriPath :: String -> [String]
parseUriPath input = case parse uriPath "(unknown)" input of
Left _ -> []
Right xs -> xs
然而,如果路徑與另一/
如,這應該是一個合法的路徑結束時,解析器將失敗。這是因爲pathPiece無法解析最後的/
,因爲沒有以下urlBaseChars。我想知道如何解析許多人,直到失敗爲止,如果失敗了,你可以撤銷角色消費。
關於樣式的說明,do {x < - m; return x}'相當於'm'(由monad法則保證!)所以'pathPiece'可以簡化一下。 – cdk