根据Haskell中的机器可读规范创建库

时间:2016-01-26 02:22:38

标签: haskell metaprogramming template-haskell

我有一个规范,我希望将其转换为库。我可以编写一个写出Haskel源代码的程序。但是有一种更简洁的方法可以让我直接编译规范(可能使用模板)吗?

对手册和教程的参考将被大大占用。

1 个答案:

答案 0 :(得分:1)

是的,您可以使用Template Haskell。这是使用它的几种方法。

一种方法是使用quasiquotation将规范文本(部分)嵌入源文件中的准规范中。要实现它,您需要编写输出Haskell AST的机器规范的解析器。如果规范是相对静态的,将规范的子集设置为有意义,或者您希望手动将规范的某些部分映射到不同的模块,这可能很有用。除了可能采用不同的方法之外,这也可能有用,为图书馆的用户提供工具,以便根据规范表达内容。

另一种方法是在普通模板Haskell拼接中execute IO。这将允许您从文件中读取规范(在这种情况下也参见addDependentFile),网络(不要这样做),或执行任意程序以生成所需的Haskell AST。如果规范更频繁地更改,或者您希望在规范和代码之间保持严格的分离,这可能会更有用。

如果生成Haskell源比Haskell AST容易得多,你可以使用像haskell-src-meta这样的库来解析一个字符串到模板Haskell AST。