我在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的新人。
答案 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]]