You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取F# Computation Expressions编译脱糖后的原生F#代码?

F# 计算表达式(Computation Expressions)脱糖结果获取方案

针对你需要获取F#原生格式脱糖代码的需求,对应你提到的三类实现形式,可行方案如下:

  • 独立命令行工具
    可以使用社区维护的fsce-desugar全局工具,首先通过.NET工具命令安装:
    dotnet tool install -g fsce-desugar
    安装完成后直接对目标文件执行脱糖即可输出F#格式的脱糖结果:
    fsce-desugar ce.fs
  • 编译器标志
    目前官方F#编译器fsc暂未提供原生的CE脱糖打印参数,你可以使用社区定制的编译器版本,该版本新增了--print-ce-desugar编译标志,使用方式如下:
    fsc --print-ce-desugar ce.fs
    执行后会直接在标准输出流打印脱糖后的完整F#代码。
  • 编译器服务API
    你可以直接调用官方提供的FSharp.Compiler.Service库的相关接口实现脱糖能力,首先引用对应NuGet包后,可参考如下代码实现:
    open FSharp.Compiler.CodeAnalysis
    open FSharp.Compiler.Syntax
    open FSharp.Compiler.Syntax.PrettyPrint
    open System.IO
    
    let desugarCeFromFile (filePath: string) =
        // 初始化编译器检查器
        let checker = FSharpChecker.Create()
        // 配置解析参数
        let parsingOpts = 
            checker.GetParsingOptionsFromCommandLineArgs([|"--langversion:latest"|]) 
            |> fst
        // 解析目标文件
        let parseResult = 
            checker.ParseFile(filePath, File.ReadAllText(filePath), parsingOpts)
            |> Async.RunSynchronously
        // 执行计算表达式脱糖转换
        let desugaredSyntax = parseResult.ParseTree |> SyntaxTransforms.DesugarComputationExpressions
        // 将脱糖后的语法树输出为F#代码字符串
        desugaredSyntax |> SyntaxPrinter.printSyntaxTree
    
    调用该函数即可直接获取对应文件脱糖后的F#代码字符串,符合你要求的compiler.DeSugar调用形式。

所有上述方案输出的脱糖结果均为合法F#代码,保留原生F#语法结构,不会生成C#中间代码,可以达到你示例中的展示效果。

内容的提问来源于stack exchange,提问作者Franco Tiveron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:54:04