English 中文(简体)
哈斯凯尔分析分析也许
原标题:Haskell parsec parsing to maybe

只是一个我无法解答的简单问题

我想将字符串解析为字符串或双字符串,其中空字符串或“n/a”被解析为无。例如:

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_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` ""\")                

我尝试了各种各样的事情......为了什么也无济于事......却一无所获。

最佳回答

也许像这样的东西吗?

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 ...       
                            ]
问题回答

暂无回答




相关问题
Euler Problem in Haskell -- Can Someone Spot My Error

I m trying my hand at Euler Problem 4 in Haskell. It asks for that largest palindrome formed by multiplying two three-digit numbers. The problem was simple enough, and I thought my Haskell-fu was up ...

How does foldr work?

Can anybody explain how does foldr work? Take these examples: Prelude> foldr (-) 54 [10, 11] 53 Prelude> foldr (x y -> (x+y)/2) 54 [12, 4, 10, 6] 12.0 I am confused about these executions....

Efficient queue in Haskell

How can I efficiently implement a list data structure where I can have 2 views to the head and end of the list, that always point to a head a tail of a list without expensive calls to reverse. i.e: ...

Problem detecting cyclic numbers in Haskell

I am doing problem 61 at project Euler and came up with the following code (to test the case they give): p3 n = n*(n+1) `div` 2 p4 n = n*n p5 n = n*(3*n -1) `div` 2 p6 n = n*(2*n -1) p7 n = n*(5*n -3)...

Ways to get the middle of a list in Haskell?

I ve just started learning about Functional Programming, using Haskel. I m slowly getting through Erik Meijer s lectures on Channel 9 (I ve watched the first 4 so far) and in the 4th video Erik ...

haskell grouping problem

group :: Ord a => [(a, [b])] -> [(a, [b])] I want to look up all pairs that have the same fst, and merge them, by appending all the list of bs together where they have the same a and discarding ...

Closest equivalent to subprocess.communicate in Haskell

I want to do a popen() / python s subprocess.communicate from Haskell - start a program, give it stdin, and get its stdout/stderr. What s the most direct / Haskellish way to do this?

热门标签