<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>多解释器 on PlumePHP</title><link>https://plumephp.com/tags/%E5%A4%9A%E8%A7%A3%E9%87%8A%E5%99%A8/</link><description>Recent content in 多解释器 on PlumePHP</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Wed, 30 Sep 2026 11:00:00 +0800</lastBuildDate><atom:link href="https://plumephp.com/tags/%E5%A4%9A%E8%A7%A3%E9%87%8A%E5%99%A8/index.xml" rel="self" type="application/rss+xml"/><item><title>Tagless Final 与代数式设计：类型类、DSL 与多解释器</title><link>https://plumephp.com/scala-tagless-final/</link><pubDate>Wed, 30 Sep 2026 11:00:00 +0800</pubDate><guid>https://plumephp.com/scala-tagless-final/</guid><description>&lt;p&gt;当你要在代码里内嵌一门「领域语言」——描述订单流程、配置 DSL、游戏指令——有两种经典编码：&lt;strong&gt;Free Monad&lt;/strong&gt;（把操作建模成 AST）与 &lt;strong&gt;Tagless Final&lt;/strong&gt;（把操作建模成类型类约束）。Tagless Final 的思路是：不定义「语法树」，而是定义「抽象代数」——一组带类型参数 &lt;code&gt;F&lt;/code&gt; 的操作签名，让任意满足约束的解释器都能运行你的程序。本文讲透它：从具体解释器到抽象代数怎么走、F 代数和类型类约束怎么设计、多解释器如何各司其职、与 Free Monad 的取舍，以及落地时的工程细节。&lt;/p&gt;</description></item></channel></rss>