有没有办法将输入字符串直接转换为列表?
输入字符串已经是列表形式,例如:
[((1,2),x),((3,2),y)]
我只想将其转换为[((1,2),x),((3,2),y)]
,可以在另一个函数中使用,而无需通过字符串获取所有值,然后创建相同的列表。
这可能吗?
答案 0 :(得分:3)
您只需为您的类型定义Read
个实例。
> data Animal = Dog | Cat deriving (Read, Show)
> read "[((1,2),Dog),((3,2),Cat)]" :: [((Int, Int), Animal)]
[((1,2),Dog),((3,2),Cat)]
答案 1 :(得分:2)
如上所述,您可以使用MERGE
将read
转换为String
类型的值,前提是[((Int, Int), Animal)]
是Animal
的实例。该实例可以自动导出:
Read
另一个潜在的缺陷是您应该明确指定类型注释,以便data Animal = Dog | Cat deriving (Show, Read)
知道要解析的内容:
read
输出:
main :: IO ()
main =
do let list = read "[((1,2),Dog),((3,2),Cat)]" :: [((Int, Int), Animal)]
animals = map snd list
print animals