Haskell将String转换为嵌套列表

时间:2018-03-18 18:26:29

标签: list haskell functional-programming

我有一个疑问,haskell中有一个函数可以帮我解决这个问题吗?我尝试接收一个带有列表形式的String作为输入,并将其转换为haskell中的实际列表

例如:

"[ [1,1] , [2,2] ]"转换为[ [1,1] , [2,2] ]

示例2:

转换"[ [ [1,1], [1,1] ], [ [2,2] , [2,2] ] , [ [1,1] ,[1,1] ] ]"

进入[ [ [1,1], [1,1] ], [ [2,2] , [2,2] ] , [ [1,1] ,[1,1] ] ]

提前感谢!

2 个答案:

答案 0 :(得分:6)

是的,该功能是read。如果您在类型注释中指定它应该读取的内容,那么只要该类型有Read的实例,您将获得所需的结果。

read "[ [1,1] , [2,2] ]" :: [[Int]]
-- [[1,1],[2,2]]

read "[ [ [1,1], [1,1] ], [ [2,2] , [2,2] ] , [ [1,1] ,[1,1] ] ]" :: [[[Int]]]
-- [[[1,1],[1,1]],[[2,2],[2,2]],[[1,1],[1,1]]]

答案 1 :(得分:1)

一个选项可能是使用Aeson包并将文本视为json数据。

Prelude> :set -XOverloadedStings
Prelude> import Data.Aeson
Prelude Data.Aeson> jsString = "[ [ [1,1], [1,1] ], [ [2,2] , [2,2] ] , [ [1,1] ,[1,1] ] ]"
Prelude Data.Aeson> decode jsString :: Maybe [[[Int]]]
Just [[[1,1],[1,1]],[[2,2],[2,2]],[[1,1],[1,1]]]