当我打电话给show / read

时间:2015-09-30 17:58:39

标签: debugging haskell

我在haskell代码中定义了一个新类型,它将一个字符串列表列为记录。一个例子可能是 Board{size=(4,7),pieces=[["OA","AA","AA"],["BBB","BOO"],["OCCC","CCCO","OOCO"]]}

我已将其设置为ShowRead的派生实例。如果我只是将上面的代码输入到ghci中,那么我就会得到我所放入的内容,这很好。但是,如果我用show来称呼它,我会得到 "Board {size = (4,7), pieces = [[\"OA\",\"AA\",\"AA\"],[\"BBB\",\"BOO\"],[\"OCCC\",\"CCCO\",\"OOCO\"]]}"
语音标记很好,但我不知道为什么反斜杠在那里。你不被允许下一个演讲标记或什么?在任何情况下,如果我试图调用read来取回它,现在这完全破裂了。我试图告诉我没有任何字符串是数据构造函数时遇到很长的错误 - 我不知道它为什么会这样。

有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:5)

GHCI已拨打XmlHttpRequest。当您在GHCI下键入show时,就好像您拨打了show something

答案 1 :(得分:5)

鉴于

> data Board = Board { size :: (Int, Int), pieces :: [[String]] } deriving (Show, Read)
> let b = Board{size=(4,7),pieces=[["OA","AA","AA"],["BBB","BOO"],["OCCC","CCCO","OOCO"]]}

show b的结果是String

> show b
"Board {size = (4,7), pieces = [[\"OA\",\"AA\",\"AA\"],[\"BBB\",\"BOO\"],[\"OCCC\",\"CCCO\",\"OOCO\"]]}"

String字符串时,任何show中的引号都会被转义。如果您输出字符串,则会发现它不包含\个字符。

> putStrLn $ show b
Board {size = (4,7), pieces = [["OA","AA","AA"],["BBB","BOO"],["OCCC","CCCO","OOCO"]]}

show生成的字符串可以通过read

再次作为电路板读回来
> (read . show $ b) :: Board
Board {size = (4,7), pieces = [["OA","AA","AA"],["BBB","BOO"],["OCCC","CCCO","OOCO"]]}
相关问题