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