我可以做以下事情:
Prelude> reads "1 2 3" :: [(Int, String)]
[(1," 2 3")]
Prelude> reads "(1,2) (3,4)" :: [((Int, Int), String)]
[((1,2)," (3,4)")]
Prelude> reads "(1,2)(3,4)" :: [((Int, Int), String)]
[((1,2),"(3,4)")]
Prelude> reads "(1,2)\n(3,4)" :: [((Int, Int), String)]
[((1,2),"\n(3,4)")]
Prelude> reads "(1,2) (3,4)" :: [((Int, Int), String)]
[((1,2)," (3,4)")]
Run Code Online (Sandbox Code Playgroud)
我可以派生Read并阅读以阅读这些内容.但是我从来没有得到过读取来返回列表中的多个元组.为什么要reads返回一个清单?
ehi*_*ird 16
没有一个标准实例这样做,但是它用于模糊的解析; 因为这不是非常有用,并且使用此功能的解析器效率非常低,所以reads返回值对于所有实际目的而言都是Maybe伪装成的[].
该报告的定义read揭示了多重解析的本意:
read :: (Read a) => String -> a
read s = case [x | (x,t) <- reads s, ("","") <- lex t] of
[x] -> x
[] -> error "PreludeText.read: no parse"
_ -> error "PreludeText.read: ambiguous parse"
Run Code Online (Sandbox Code Playgroud)
所以:历史原因,基本上.
| 归档时间: |
|
| 查看次数: |
1509 次 |
| 最近记录: |