String 如何使用'reads'将字符串转换为元组?

String 如何使用'reads'将字符串转换为元组?,string,haskell,String,Haskell,在GHCi中,我尝试将字符串读取为元组 >reads "(1,2)" :: [(Integer),(Integer)] 哪个输出错误: 无法将类型[Char]与整数匹配 预期类型:[(整数,整数)] 实际类型:[(整数,字符串)] 我在网上找到的一个例子是: >reads "(34, True),abc" :: [((Integer,Bool),String)] [((34,True),",abc")] 那么,为什么我尝试创建的字符串不起作用呢?您必须考虑读取总是产生的尾部字符串

在GHCi中,我尝试将字符串读取为元组

>reads "(1,2)" :: [(Integer),(Integer)]
哪个输出错误:

无法将类型[Char]与整数匹配
预期类型:[(整数,整数)]
实际类型:[(整数,字符串)]

我在网上找到的一个例子是:

>reads "(34, True),abc" :: [((Integer,Bool),String)]
[((34,True),",abc")]

那么,为什么我尝试创建的字符串不起作用呢?

您必须考虑
读取总是产生的尾部
字符串

> reads "(1,2)" :: [((Integer,Integer),String)]
[((1,2),"")]
如果您只需要一对,并且绝对确定字符串解析正确,请使用
read

> read "(1,2)" :: (Integer,Integer)
(1,2)
请注意,
read
(与
reads
)不同)将使程序在无效字符串上崩溃。如果无法假定字符串解析正确,但仍然需要一对,请改用form
Text.Read