读取八进制数
read-ing an octal number
八进制数是 Haskell 整数语法的一部分。还有lex
认得:
Prelude> lex "0o10"
[("0o10","")]
但是 read
没有(Ubuntu 18.04 上的 ghc 8.0.2):
Prelude> read "0o10"
*** Exception: Prelude.read: no parse
在6.3.3中报告对此不是很清楚。它只是说明 lex
读取一个词素,而 lex
被 read
使用。这是故意的吗?
read "0o10"
的类型是:
GHCi> :t read "0o10"
read "0o10" :: Read a => a
在GHCi中,类型变量a
将默认为()
,as explained in the User's Guide:
GHCi> read "()"
()
请注意,您描述的行为不限于将被解析为八进制的字符串...
GHCi> read "[1,2,3]"
*** Exception: Prelude.read: no parse
... 与 read
不同,lex :: ReadS String
专门生成 String
结果,而不是让您选择 Read
.[=23 的实例=]
要获得您期望的行为,请提供合适的类型注释或签名:
GHCi> read "0o10" :: Integer
8
八进制数是 Haskell 整数语法的一部分。还有lex
认得:
Prelude> lex "0o10"
[("0o10","")]
但是 read
没有(Ubuntu 18.04 上的 ghc 8.0.2):
Prelude> read "0o10"
*** Exception: Prelude.read: no parse
在6.3.3中报告对此不是很清楚。它只是说明 lex
读取一个词素,而 lex
被 read
使用。这是故意的吗?
read "0o10"
的类型是:
GHCi> :t read "0o10"
read "0o10" :: Read a => a
在GHCi中,类型变量a
将默认为()
,as explained in the User's Guide:
GHCi> read "()"
()
请注意,您描述的行为不限于将被解析为八进制的字符串...
GHCi> read "[1,2,3]"
*** Exception: Prelude.read: no parse
... 与 read
不同,lex :: ReadS String
专门生成 String
结果,而不是让您选择 Read
.[=23 的实例=]
要获得您期望的行为,请提供合适的类型注释或签名:
GHCi> read "0o10" :: Integer
8