如果Lisp中的宏是monadic是什么意思?

haw*_*eye 5 lisp macros monads static-typing

Lux语言介绍中,我们读到:

与大多数其他lisps不同,Lux宏是monadic.通过宏(Lux a)线程化Compiler实例,类型是负责任的魔术类型.宏必须具有该Macro类型,然后声明为宏.

现在我假设这意味着在编译时可以获得其他类型检查信息,从而为您提供有关代码正确性的一些反馈.

但是在编译时可以找到的宏可能是不正确的?

我的问题是:如果Lisp中的宏是monadic什么意思?

Cac*_*tus 0

粗略地看,“普通”宏和阅读器宏在 Lux 中似乎都是一元的。

对于普通宏,它们通过线程传递类型状态Compiler。各种宏操作(我想gensyming 将是一个明显的例子)需要更改此内部状态,因为它们依赖于状态效果,例如维护下一个可用的新鲜原子。线程状态(即看起来像的函数s -> (a, s),获取初始状态作为参数并返回更新后的状态和结果)表现出明显的一元结构,即给定某个第一步s -> (a, s),选择下一步s -> (b, s)可以取决于查看中间结果a

对于读取器宏,这是一个类似的故事,只不过所讨论的效果是输入的消耗。一元解析器是一种允许先前使用的输入影响后续输入的解析方式的解析器。