在 Haskell 中,我可以使用 quasiquoter 使用自定义解析器定义的具体语法生成自定义 AST,如下所述:https ://wiki.haskell.org/Quasiquotation
这在 F# 中可能吗?
在 Haskell 中,我可以使用 quasiquoter 使用自定义解析器定义的具体语法生成自定义 AST,如下所述:https ://wiki.haskell.org/Quasiquotation
这在 F# 中可能吗?
我能想到的最接近的是 F# 的 TypeProviders。它允许提供程序代码成为编译器管道的一部分,并构造要注入的类型。
例如,有 XML 类型提供程序:
type Author = XmlProvider<"""<author name="Paul Feyerabend" born="1924" />""">
let sample = Author.Parse("""<author name="Karl Popper" born="1902" />""")
printfn "%s (%d)" sample.Name sample.Born
有关更多信息,请参阅FSharp.Data 项目。