我想同时获取任意 Haskell 代码的字符串和值。例如:
f (1+1) -> (2,"1+1")
我想这样做的原因是因为我正在编写一种编程语言,并且我想提供一个选项来解释代码(用于快速运行,即脚本)或将其编译为 Haskell 代码(用于高效运行时)。因此,对于每个内置函数,我只想提供一次实现。那就是我不想说
plusop = ((+),"(+)")
我有一些想法,包括阅读原始的 haskell 源代码或生成编译器的单独脚本,但如果这个问题是可能的,这些似乎不太优雅。
看起来 QuasiQuotation 可以使这成为可能,但是如果我使用它,我无法弄清楚如何获取表达式的 Haskell 值(我只能获取字符串)。
是否可以?如何做呢?