标签:oat logs char string 包括 option 联结 参考 markdown
使用 Applicative 式的 Parser。
包括使用 (<$>), (<*>), (<$), (<*), (*>), (<|>), many 等运算符。
import Control.Monad
-- show
import Text.Parsec
import Control.Applicative hiding ((<|>))
number = many1 digit
plus = char '+' *> number
minus = (:) <$> char '-' <*> number
integer = plus <|> minus <|> number
float = fmap rd $ (++) <$> integer <*> decimal
where rd = read :: String -> Float
decimal = option "" $ (:) <$> char '.' <*> number
-- /show
main = forever $ do putStrLn "Enter a float: "
input <- getLine
parseTest float input
*Main> main
Enter a float:
2.3
2.3
Enter a float:
1
1.0
Enter a float:
-1
-1.0
Enter a float:
+6.98
6.98
标签:oat logs char string 包括 option 联结 参考 markdown
原文地址:http://www.cnblogs.com/zwvista/p/7868767.html