是否可以创建自定义 Haskell“顶层”?

问题描述 投票:0回答:1

我正在用 Haskell 编写一个编译器,试图避开词法分析和解析阶段。我希望源代码是作为代数类型实现的 AST。

我当前的结构如下:

  • 我有一组
    .hs
    文件,其中包含 AST 节点的定义,以及从程序到其输出的转换函数,主要是一个名为
    compile
    的一元函数。这就是“编译器实现”。
  • 我有另一个
    .hs
    文件,它定义了一个名为
    program
    的空函数,它返回要编译的 AST。这就是“程序”。
  • 最后,我有最后一个
    .hs
    文件,它将
    main
    基本上定义为
    compile program
    。这就是“司机”。

我希望能够以整齐的打包形式提供编译器(编译器实现+驱动程序),期望我的用户提供自己的

program
定义。

我尝试使用 AST 类型的

Read
实例来实现编译器,但问题是程序错误的反馈显示“无法读取”,仅此而已。因为我希望程序采用有效的 Haskell 形式,所以我希望读取 AST 的部分使用 Haskell 编译器来完成。

我想象一个解决方案,我将能够提供一个增强的 Haskell 编译器,其中包含编译器实现和驱动程序,这将编译程序。

是否可以创建这种人工制品,例如 LISP 图像或 OCaml 自定义顶层?

haskell
1个回答
0
投票

这大致就是 xmonad 所做的事情,因此您可以阅读该机制的工作原理并从中获取灵感。 dyre 包尝试将该技术捆绑到一个独立的库中。

您需要制作一个完整的 Haskell 编译器——即 GHC——作为打包的一部分提供给用户。

© www.soinside.com 2019 - 2024. All rights reserved.