Haskell:将输入字符串直接转换为列表

时间:2016-10-28 19:08:35

标签: string list haskell

有没有办法将输入字符串直接转换为列表?

输入字符串已经是列表形式,例如:

[((1,2),x),((3,2),y)]

我只想将其转换为[((1,2),x),((3,2),y)],可以在另一个函数中使用,而无需通过字符串获取所有值,然后创建相同的列表。

这可能吗?

2 个答案:

答案 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)

如上所述,您可以使用MERGEread转换为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