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

如何为GHC传递-ddump-splices选项查看Yesod路由生成代码?

如何为Yesod项目的GHC传递-ddump-splices选项

我刚开始摸索Yesod的时候也踩过这个坑——stack的参数和GHC的参数很容易混,得用正确的方式把-ddump-splices传给GHC才行,下面给你两种常用的方法:

用stack runghc直接运行单文件的正确命令

stack runghc会先处理自己的参数,如果你直接把-ddump-splices放在文件名前面,stack会把它当成自己的选项,根本传不到GHC那里。正确的做法是用--来分隔stack的参数和要传给GHC的参数:

stack runghc -- -ddump-splices helloworld.hs

这样--后面的-ddump-splices就会被正确传递给GHC,你就能在终端看到mkYesod生成的所有模板Haskell代码了。如果想把输出保存到文件里,可以指定输出路径:

stack runghc -- -ddump-splices=yesod-routes-gen.txt helloworld.hs

针对完整Yesod项目的持久化设置

如果你的项目是用stack new创建的完整Yesod项目,不想每次运行都手动加参数,可以把-ddump-splices加到项目配置里:

  • 修改.cabal文件:找到你的可执行程序对应的executable块,添加ghc-options字段:
    executable helloworld
      main-is:             Main.hs
      build-depends:       base >=4.14 && <5, yesod >=1.6
      hs-source-dirs:      app
      default-language:    Haskell2010
      ghc-options:         -ddump-splices
    
  • 或者修改stack.yaml:在文件里添加全局的GHC选项(注意会作用于整个项目的所有目标):
    ghc-options:
      "*": -ddump-splices
    

之后运行stack build,GHC就会自动输出所有模板Haskell生成的代码,一般会放在.stack-work/dist/[你的系统架构]/Cabal-[版本]/build/目录下的对应文件里。

通过-ddump-splices你能清楚看到mkYesod "HelloWorld" [parseRoutes| / HomeR GET |]背后生成的路由类型、Yesod类实例、请求处理的辅助函数等代码,对理解Yesod的路由机制帮助很大。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:04:32