我一直很感兴趣的是,我是否可以创建一个非常简单的AST,它由操作和叶节点组成。但更具体地说,我希望能够使用任何类型作为叶节点,而不是在AST数据类型本身中显式指定它,如下所示。到目前为止,我所能做到的最接近的是需要我摸索一些GADT的概念: {-# LANGUAGE GADTs #-}
Leaf :: l -> Tree l
Operation然而,定义操作(最后一行)的eval会导致以下非常模糊的错
在Haskell中,如果我想要一个类似二叉树的东西,我会使用一个代数数据类型。data BinTree a b = EmptyBinTree | BinTree a (Maybe b) (BinTree a) (BinTree a)
在通用Lisp中,我可能将一棵空树表示为一个专用的自评估符号(如:empty-bin-tree )或一个通用的符号(如nil )。-
我想用Haskell为另一种语言生成代码,但我对如何处理这个问题感到困惑。我正在寻找Haskell语言的抽象和优雅表示,这对代码生成也很有用。所讨论的语言是InstallScript ( language reference guide的)。有没有人能提供一些提示(可以举例说明一下?)关于如何在Haskell类型中捕获InstallScript中使用的语言构造,或者指向类似的项目以获取灵感?