代码之家  ›  专栏  ›  技术社区  ›  false

读八进制数

  •  2
  • false  · 技术社区  · 7 年前

    八进制数是Haskell整数语法的一部分。阿尔索 lex 认识到:

    Prelude> lex "0o10"
    [("0o10","")]
    

    但是 read

    Prelude> read "0o10"
    *** Exception: Prelude.read: no parse
    

    报告在6.3.3中对此不是很清楚。它只是说 莱克斯 读一个词素,然后 莱克斯 用于 阅读 . 这是有意的吗?

    1 回复  |  直到 7 年前
        1
  •  7
  •   duplode    7 年前

    类型 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
    

    ... 那 lex :: ReadS String ,不像 read ,专门生产 String 结果,而不是允许您选择 Read .

    要获得预期的行为,请提供适当的类型批注或签名:

    GHCi> read "0o10" :: Integer
    8
    
    推荐文章