根据 Haskell 中的机器可读规范创建库
Creating libraries from machine readable specifications in Haskell
我有一个规范,我希望将其转换成一个库。我可以编写一个程序来写出 Haskel 源代码。然而,有没有一种更简洁的方法可以让我直接编译规范(可能使用模板)?
大量引用手册和教程。
是的,您可以使用 Template Haskell。有几种使用方法。
一种方法是使用 quasiquotation 将规范的(部分)文本嵌入到源文件的准引用中。要实现它,您需要编写一个输出 Haskell AST 的机器规范的解析器。如果规范相对静态、拥有规范的子集或您想手动将规范的各个部分映射到不同的模块,这可能很有用。这可能也很有用,除了可能是一种不同的方法之外,还可以为库的用户提供工具来根据规范表达事物。
另一种方法是 execute IO in a normal Template Haskell splice. This would allow you to read the specification from a file (see addDependentFile 在这种情况下),网络(不要这样做),或者执行任意程序来生成所需的 Haskell AST。如果规范更频繁地更改,或者您希望严格区分规范和代码,这可能会更有用。
如果生成 Haskell 源比 Haskell AST 更容易,您可以使用像 haskell-src-meta 这样的库,它将字符串解析为模板 Haskell AST。
我有一个规范,我希望将其转换成一个库。我可以编写一个程序来写出 Haskel 源代码。然而,有没有一种更简洁的方法可以让我直接编译规范(可能使用模板)?
大量引用手册和教程。
是的,您可以使用 Template Haskell。有几种使用方法。
一种方法是使用 quasiquotation 将规范的(部分)文本嵌入到源文件的准引用中。要实现它,您需要编写一个输出 Haskell AST 的机器规范的解析器。如果规范相对静态、拥有规范的子集或您想手动将规范的各个部分映射到不同的模块,这可能很有用。这可能也很有用,除了可能是一种不同的方法之外,还可以为库的用户提供工具来根据规范表达事物。
另一种方法是 execute IO in a normal Template Haskell splice. This would allow you to read the specification from a file (see addDependentFile 在这种情况下),网络(不要这样做),或者执行任意程序来生成所需的 Haskell AST。如果规范更频繁地更改,或者您希望严格区分规范和代码,这可能会更有用。
如果生成 Haskell 源比 Haskell AST 更容易,您可以使用像 haskell-src-meta 这样的库,它将字符串解析为模板 Haskell AST。