微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在HaskellParsec.Combinator中解析浮点数

如何解决如何在HaskellParsec.Combinator中解析浮点数

我正在尝试使用Parsec.Combinator库解析haskell中的字符串。但是我找不到如何解析浮动值。我的函数只读取整数(带数字,但数字仅解析整数值)。

parsePoint :: Parser Point
parsePoint = do
              string "Point"
              x <- many1 digit
              char ','
              y <- many1 digit
              return $ (Point (read x) (read y))

搜索了Text.Parsec.Number库,但是没有找到使用示例。

感谢阅读

解决方法

有多个Parser可以解析浮点数,例如floating :: (Floating f,Stream s m Char) => ParsecT s u m fParser只是Parsec特殊情况的别名,具体取决于您使用的模块。例如type Parser = Parsec Text ()

如果您的Point这样接受了两个Float,则可以使用parsec3-numbers package并使用:

import Text.Parsec.Char(char,string)
import Text.Parsec.Number(floating)
import Text.Parsec.Text(Parser)

data Point = Point Float Float

parsePoint :: Parser Point
parsePoint = do
              string "Point "
              x <- floating
              char ','
              y <- floating
              return (Point x y)

然后它可以解析字符串"Point 3.14,2.718"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。