0

在 Haskell 中,我可以使用 quasiquoter 使用自定义解析器定义的具体语法生成自定义 AST,如下所述:https ://wiki.haskell.org/Quasiquotation

这在 F# 中可能吗?

4

1 回答 1

4

我能想到的最接近的是 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 项目

于 2020-02-11T11:43:26.787 回答