【发布时间】:2021-10-18 01:05:17
【问题描述】:
我想获取任意 Haskell 代码的字符串和值。例如:
f (1+1) -> (2,"1+1")
我想这样做的原因是因为我正在编写一种编程语言,并且我想提供一个选项来解释代码(用于快速运行,即脚本)或将其编译为 Haskell 代码(用于高效运行时)。因此,对于每个内置函数,我只想提供一次实现。那就是我不想说
plusop = ((+),"(+)")
我有一些想法,包括阅读原始的 haskell 源代码或生成编译器的单独脚本,但如果这个问题是可能的,这些似乎没有那么优雅。
看起来 QuasiQuotation 可以使这成为可能,但如果我使用它,我不知道如何获取表达式的 Haskell 值(我只能获取字符串)。
有可能吗?怎么办?
【问题讨论】:
-
是的,但我认为这可能会非常低效,因为它会解释所有代码,但是这样操作中的大部分代码仍然被编译。此外,编写解释器比编写编译器更容易(这本质上就是编写编译器——尽管目前这是我所做的,所以可能还不错)。
标签: haskell quasiquotes