私には解けない素朴な疑問。
文字列を 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 に対してあらゆる種類のことを試しましたが、役に立ちませんでした。