在 Haskell 中使用大括号创建数据

Create data with Curly Braces in Haskell

我正在尝试创建一个 AST 并将其打印出来。我正在解析 C 语言的一部分。但是,当我必须表示一个空语句时,即

{}

我完全卡住了,因为我不能简单地创建一个包含类似内容的新数据。或者当它是以下

{{}}

相当于

SScope({})

从技术上讲,我的问题是,我如何能够在 Haskell 花括号中进行漂亮的打印?所以当我收到

{}

我想打印出完全相同的效果,比如

{}

那个。我会做的是这样的:

data Stmt = {}

与其他数据元素一样,但我无法做到这一点。有什么建议吗?

您需要区分语言的词汇成分(大括号等)和用于表示句法结构的 Haskell 数据类型。

Haskell 端应该有类似

的东西
data Stmt = 
    CompoundStmnt [Stmt]
    | ValueStmt Identifier Expression
    |  -- And so on for all the other types of statement you want.

然后定义一个识别大括号的解析器,以及一个打印出大括号括起来的值的漂亮打印机。