我想使用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当前缩进级别。
答案 0 :(得分:3)
你的意思是递归地呼叫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
因此您可能需要列出更多代码。