1

私には解けない素朴な疑問。

文字列を 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 に対してあらゆる種類のことを試しましたが、役に立ちませんでした。

4

1 に答える 1

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 ...       
                            ]
于 2012-05-28T10:36:50.560 に答える