例如,给出以下树数据类型:
data Tree a = Node [Tree a] | Leaf a deriving Show
type Sexp = Tree String
Run Code Online (Sandbox Code Playgroud)
如何使用高阶组合器表达"漂亮"功能,该组合打印出适当缩进的树?例如:
sexp =
Node [
Leaf "aaa",
Leaf "bbb",
Node [
Leaf "ccc",
Leaf "ddd",
Node [
Leaf "eee",
Leaf "fff"],
Leaf "ggg",
Leaf "hhh"],
Leaf "jjj",
Leaf "kkk"]
pretty = ????
main = print $ pretty sexp
Run Code Online (Sandbox Code Playgroud)
我希望该程序的结果是:
(aaa
bbb
(ccc
ddd
(eee
fff)
ggg
hhh)
jjj
kkk)
Run Code Online (Sandbox Code Playgroud)
这是一个不完整的解决方案,使用"fold"作为组合器,不实现缩进:
fold f g (Node children) = f (map (fold f g) children) …Run Code Online (Sandbox Code Playgroud)