如何解析 Haskell 中的浮点数 (Parsec.Combinator)
How to Parse a floating number in Haskell (Parsec.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 f
. The Parser
is just an alias for a special case of Parsec
, depending on which module you use. For example type Parser = Parsec Text ()
。
如果您的 Point
因此接受例如两个 Float
,您可以使用 parsec3-numbers
package 并使用:
import Text.Parsec.Char(char, string)
import Text.Parsec.Number(<b>floating</b>)
import Text.Parsec.Text(Parser)
data Point = Point Float Float
parsePoint :: Parser Point
parsePoint = do
string "Point "
<b>x <- floating</b>
char ','
<b>y <- floating</b>
return (Point x y)
这就可以解析了,在本例中是一个字符串"Point 3.14,2.718"
我正在尝试使用 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 f
. The Parser
is just an alias for a special case of Parsec
, depending on which module you use. For example type Parser = Parsec Text ()
。
如果您的 Point
因此接受例如两个 Float
,您可以使用 parsec3-numbers
package 并使用:
import Text.Parsec.Char(char, string)
import Text.Parsec.Number(<b>floating</b>)
import Text.Parsec.Text(Parser)
data Point = Point Float Float
parsePoint :: Parser Point
parsePoint = do
string "Point "
<b>x <- floating</b>
char ','
<b>y <- floating</b>
return (Point x y)
这就可以解析了,在本例中是一个字符串"Point 3.14,2.718"