Parsing 如何在Haskell中写入选项xp?
我需要编写一个函数Parsing 如何在Haskell中写入选项xp?,parsing,haskell,Parsing,Haskell,我需要编写一个函数option xp,它试图应用解析器p。如果p 如果失败,则返回值x,否则返回p返回的值 option :: a -> Parser a -> Parser a option :: a -> Parser a -> Parser a option x p = case parse p x of [] -> x [(v,out)] -> [(v,out)] 上面是我写的,但不起作用。这里有什么问题?我
option xp
,它试图应用解析器p。如果p
如果失败,则返回值x,否则返回p返回的值
option :: a -> Parser a -> Parser a
option :: a -> Parser a -> Parser a
option x p = case parse p x of
[] -> x
[(v,out)] -> [(v,out)]
上面是我写的,但不起作用。这里有什么问题?我假设在这个答案中
type Parser=ReadS
和parse=id
很接近,但您正试图向解析器传递一个结果类型的值——几乎可以肯定,您希望向解析器传递它应该解析以生成结果的字符串。此外,您不仅必须返回结果类型的值,还必须返回输入流的未解析位。因此:
option x p s {- extra argument -} = case parse p s {- pass s, not x -} of
[] -> [(x, s)] {- return a value, and don't consume any input -}
other -> other {- might as well work correctly if there are multiple parses -}
Parser
和parse
的类型是什么?很多库都有自己的Parser
,这取决于具体的类型,正如Sibi所说,但它可能类似于p pure x
。