我有一个疑问,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] ] ]
提前感谢!
答案 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]]]