这是一个我无法解决的简单问题。
我想将字符串解析为String或Maybe Double,其中空字符串或“n / a”被解析为Nothing。例如:
data Value = S String | N (Maybe Double)
value::CharParser () Value
value = val <* spaces
where val = N <$> v_number
<|> S <$> v_string
<|> N <$> v_nothing
我在使用v_nothing(以及引导和训练空白区域)时遇到了问题。
感谢。
编辑:
v_number :: CharParser () (Maybe Double)
v_number = do s <- getInput
case readSigned readFloat s of
[(n, s')] -> Just n <$ setInput s'
_ -> empty
v_string :: CharParser () String
v_string = (many1 jchar)
where jchar = char '\\' *> (p_escape <|> p_unicode)
<|> satisfy (`notElem` "\"\\")
我为v_nothing尝试了各种各样的事情但无济于事。
答案 0 :(得分:0)
也许是这样的?
value = do skipMany space
choice $ map try [
do string "n/a" <|> (eof >> return [])
return $ N Nothing,
do d <- many digit
return $ N $ Just (read d)
-- do ...
]