a -> String draw = rend-6ren">
gpt4 book ai didi

haskell - 如何使用 Haskell pretty-print 分层缩进 "nest"

转载 作者:行者123 更新时间:2023-12-02 21:14:43 25 4
gpt4 key购买 nike

我想使用 Haskell Pretty 包打印 AST。

一切正常,但嵌套结构无法正确缩进。

我做了这样的事情:

draw :: Pretty a => a -> String
draw = render.pretty

pretty (Letin d c ) = text "let" <+> text (draw d) $$
nest 4 (text "in" <+> text (draw c))

但是结果是这样的:

let Const  x := 2
in let Var y := Int
in y = 3; let Var z := Int
in z = 0; z = z + 1

似乎嵌套级别不是继承的,因此所有嵌套级别都是绝对的+4边距,而不是在每个级别连续缩进,即相对于其父级(当前缩进级别)+4。

最佳答案

你的意思是递归调用pretty吗?从你的问题中我无法判断。

尝试重现您所做的事情的快速测试:

import Text.PrettyPrint

data Letin = Letin String (Maybe Letin)

draw = show

pretty (Letin d c ) =
text "let" <+> text (draw d) $$
nest 4 (text "in" <+> case c of Nothing -> text "empty";
Just c' -> pretty c')

结果如预期:

let "x"
in let "y"
in empty

因此您可能需要列出更多代码。

关于haskell - 如何使用 Haskell pretty-print 分层缩进 "nest",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5752361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com