使用Lisp宏无法实现的Haskell monad可以做什么,反之亦然?

mlj*_*jrg 1 lisp macros monads haskell

我目前的理解是宏可以实现任何可以想象的概念,包括monad,因为它们"手头有编译器".这是真的?例如,我遇到过这个链接

请给我一些事实和例子,没有激情的答案.谢谢.

Mat*_*hid 7

这是一种奇怪的比较.这有点像问"柴油发电机不能用汽油车做什么?" 呃,那些不是真正的同类......

Lisp宏[我几乎一无所知]允许你进行编译时元编程.您可以使用它来实现各种有用的东西,从消除一些样板代码到虚拟定义一个全新的编程语言.

Haskell monad是构造某些类型的计算的有用方法.他们可以轻松地做某些本来有点繁琐的事情.(例如,在运行下一个函数之前检查每个函数的结果以确保它成功.)所有这些都是运行时的事情; 它与编译时代码生成无关.

  • @mljrg如果你在Haskell中寻找等价的Lisp宏,那么你必须去模板Haskell.Monad和宏是两个不同的东西,比较它们是不恰当的. (7认同)