Parsing 在Haskell中编写深度贴图的更好方法?

Parsing 在Haskell中编写深度贴图的更好方法?,parsing,haskell,mapping,Parsing,Haskell,Mapping,我正在解析一个包含数行的文本文件。我想把它们变成[[[Int]]]。(电路板列表中的行列表中的单元格列表。) 数独 main.hs 您可以使用将值包装在列表中,因此我们可以将\char->read[char]编写为read。纯 接下来,我们可以将\row->map(read.pure)行lambda表达式编写为map(read.pure)。这意味着我们可以将该行重写为: let sudokus = map (map (map (read . pure))) splitBoards :: [[[I

我正在解析一个包含数行的文本文件。我想把它们变成
[[[Int]]]
。(电路板列表中的行列表中的单元格列表。)

数独

main.hs


您可以使用将值包装在列表中,因此我们可以将
\char->read[char]
编写为
read。纯

接下来,我们可以将
\row->map(read.pure)行
lambda表达式编写为
map(read.pure)
。这意味着我们可以将该行重写为:

let sudokus = map (map (map (read . pure))) splitBoards :: [[[Int]]]
或者我们可以通过以下方式避免这些括号:

let sudokus = (map . map . map) (read . pure) splitBoards :: [[[Int]]]
let sudokus=(map.map.map)(read.pure)拆分板::[[[Int]]]]
因此,这里它意味着
(read.pure)
是“最里面的”
映射的映射函数

> print splitBoards
>[["530070000","600195000","098000060","800060003","400803001","700020006","060000280","000419005","000080079"],["400700500","300800001","700900008","060030010","090070050","080010790","002006900","005000030","000004200"]]
> print sudokus
>
[[[5,3,0,0,7,0,0,0,0],[6,0,0,1,9,5,0,0,0],[0,9,8,0,0,0,0,6,0],[8,0,0,0,6,0,0,0,3],[4,0,0,8,0,3,0,0,1],[7,0,0,0,2,0,0,0,6],[0,6,0,0,0,0,2,8,0],[0,0,0,4,1,9,0,0,5],[0,0,0,0,8,0,0,7,9]],[[4,0,0,7,0,0,5,0,0],[3,0,0,8,0,0,0,0,1],[7,0,0,9,0,0,0,0,8],[0,6,0,0,3,0,0,1,0],[0,9,0,0,7,0,0,5,0],[0,8,0,0,1,0,7,9,0],[0,0,2,0,0,6,9,0,0],[0,0,5,0,0,0,0,3,0],[0,0,0,0,0,4,2,0,0]]]
let sudokus = map (map (map (read . pure))) splitBoards :: [[[Int]]]
let sudokus = (map . map . map) (read . pure) splitBoards :: [[[Int]]]