如何将[[String]]转换为String值转换回原始类型[[String]]?

时间:2017-01-15 18:35:06

标签: haskell

我在haskell的一个小项目上工作,就像简单的excel一样。基本上我的电子表格表示为列表列表(类型为 [[String]] )。示例板看起来像:

[["2", "=SUM(A0:C0)", "1"], ["7", "2", "3"], ["2", "=SUM(A0:B0)", ""]]

其中一个要求是将电路板保存在文件中,也可以从文件中导入电路板。

要保存在文件I中,将电路板转换为字符串(以便能够将其写入文件中):

filenameOut <- getLine
writeFile filenameOut (show (board))
putStrLn "Board saved to file."

上传电路板:

filenameIn <- getLine
handle <- openFile filenameIn ReadMode
input <- hGetContents handle

但输入是一个字符串&#34; [[&#34; 2&#34;,&#34; = SUM(A0:C0)&#34;,&#34; 1&#34;],[ &#34; 7&#34;,&#34; 2&#34;,&#34; 3&#34;],[&#34; 2&#34;,&#34; = SUM(A0:B0)& #34;,&#34;&#34;]]&#34;我想将它转换回[[String]]。  我试图使用正则表达式但似乎不是一个好的解决方案。

是否还有其他一些解决方案可以进行某种逆操作以返回[[String]]? 请温柔,我是Haskell的新人。

1 个答案:

答案 0 :(得分:2)

查看前奏中的Read类型类。

read :: (Read a) => String -> a是一个部分函数,​​它尝试从输入字符串中解析类型为a的值。并非所有类型都有Read个实例,但对于那些val :: A个实例,read (show val) :: A会返回val;换句话说,read show是反向的。

使用read有点棘手,因为一般来说,编译器无法知道你想要的输出类型。如果你听到GHC呻吟着一个模糊的类型&#39;你应该注释read的结果,如下所示:

read "[[\"1\", \"hello\"], []" :: [[String]]