我在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来取回它,现在完全打破了.我试图告诉我没有任何字符串是数据构造函数,我得到一个很长的错误 - 我不知道为什么它认为它们是.
这有什么办法吗?
特定
> 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"]]}
Run Code Online (Sandbox Code Playgroud)
结果show b是一个String
> show b
"Board {size = (4,7), pieces = [[\"OA\",\"AA\",\"AA\"],[\"BBB\",\"BOO\"],[\"OCCC\",\"CCCO\",\"OOCO\"]]}"
Run Code Online (Sandbox Code Playgroud)
在使用字符串String时,任何引号都会被转义show.如果输出字符串,则会看到它不包含\字符.
> putStrLn $ show b
Board {size = (4,7), pieces = [["OA","AA","AA"],["BBB","BOO"],["OCCC","CCCO","OOCO"]]}
Run Code Online (Sandbox Code Playgroud)
产生的字符串show可以作为电路板再次读回read
> (read . show $ b) :: Board
Board {size = (4,7), pieces = [["OA","AA","AA"],["BBB","BOO"],["OCCC","CCCO","OOCO"]]}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |