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

从Haskell中的机器可读规范创建库,haskell,metaprogramming,template-haskell,Haskell,Metaprogramming,Template Haskell,我有一个规范,我想把它转换成一个库。我可以写一个程序写出Haskel源代码。但是,有没有一种更干净的方法可以让我直接编译规范(可能使用模板) 参考手册和教程将非常合适。是的,您可以使用。下面是一些使用它的方法 一种方法是在源文件中的准旋转中嵌入(部分)规范文本。为了实现它,您需要编写一个机器规范的解析器来输出Haskell AST。如果规范是相对静态的,那么这可能很有用,拥有规范的子集是有意义的,或者您希望手动将规范的部分映射到不同的模块。除了一种不同的方法之外,这可能也很有用,可以为库的用户提

我有一个规范,我想把它转换成一个库。我可以写一个程序写出Haskel源代码。但是,有没有一种更干净的方法可以让我直接编译规范(可能使用模板)

参考手册和教程将非常合适。

是的,您可以使用。下面是一些使用它的方法

一种方法是在源文件中的准旋转中嵌入(部分)规范文本。为了实现它,您需要编写一个机器规范的解析器来输出Haskell AST。如果规范是相对静态的,那么这可能很有用,拥有规范的子集是有意义的,或者您希望手动将规范的部分映射到不同的模块。除了一种不同的方法之外,这可能也很有用,可以为库的用户提供工具,用规范来表达事物

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


如果生成Haskell源代码比生成Haskell AST容易得多,那么可以使用类似的库,将字符串解析为模板Haskell AST。

“我可以编写一个写出Haskel源代码的程序。”如果该程序是用Haskell编写的,Haskell源代码总是在某一点由某个AST表示——将该AST转换为TH AST,并且该AST可以作为代码直接插入TH AST。您不能拼接模块或其导入和导出,因此这有其局限性。最后,“对教程和手册的引用”是离题的。有没有理由把它转换成一个库而不是仅仅编写一个解释器?我希望能够在编译时向程序员公开标准定义的不变量和类型。通过这种方式,程序员可以确信他们写的是什么授予代码。你的这个规范,是用什么写的?Haskell有时被称为可执行规范语言。可以看看规范语言,如Z(Zed)、B-Method、Alloy、TLA、VDM-SL。Maaybe还可以看看“构造性编程”——一个很好的介绍是de Moor和Gibbon的“弥合算法差距:…”