读取八进制数



八进制数是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读取词位,并且lexread使用。这是有意的吗?

read "0o10"的类型为:

GHCi> :t read "0o10"
read "0o10" :: Read a => a

在GHCi中,类型变量a将默认为(),如《用户指南:》中所述

GHCi> read "()"
()

请注意,您描述的行为并不局限于将被解析为八进制的字符串。。。

GHCi> read "[1,2,3]"
*** Exception: Prelude.read: no parse

read不同,lex :: ReadS String专门生成String结果,而不是允许您选择Read的实例。

要获得您期望的行为,请提供合适的类型注释或签名:

GHCi> read "0o10" :: Integer
8

最新更新