2012-05-28 42 views
1

只是一個簡單的問題,我無法解決。Haskell parsec解析也許

我想將一個字符串解析爲一個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無濟於事。

+3

請問您可以包括'v_number','v_string'和'v_nothing'的定義到目前爲止。 – dflemstr

+0

'v_string'不應該以'''開頭嗎? – pat

回答

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 ...  
          ]