我正在学习镜头包.我必须说这是一项相当具有挑战性的任务.
有人能告诉我如何使用拉链从镜头遍历一棵树吗?特别是,如何编写一个带有根列表并允许我访问子树分支的函数?
假设我有这棵树.如果我的输入是[1, 3],该功能应该允许我访问节点10和11.
import Control.Lens
import Data.Tree
import Data.Tree.Lens
testTree = Node 1 [ Node 2 [ Node 4 [ Node 6 [], Node 8 [] ],
Node 5 [ Node 7 [], Node 9 [] ] ],
Node 3 [ Node 10 [],
Node 11 [] ]
]
zipperTree = zipper testTree
Run Code Online (Sandbox Code Playgroud)
另外,我如何使用saveTape和restoreTape保存遍历路径(到StateT或IORef)?
是否有另一种方式来写这样的东西:
data Message = Message1 Int Int ByteString
| Message2 Double Int Int
| Message3 Double Double
.....
| Message256 CustomType
Run Code Online (Sandbox Code Playgroud)
有太多的构造函数,并且很难使用记录语法.我真正想要做的是编写解析器,是否有一些替代方法?
parse :: Bytestring -> Parser Message
Run Code Online (Sandbox Code Playgroud)