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

如何在GHCi中生成SVG而无需编译Haskell diagrams?

在GHCi中直接生成diagrams的SVG输出(替代已失效的SizeSpec2D/mkSizeSpec)

我最近刚好踩过这个坑,折腾了一会儿终于找到适配新版diagrams的解决方案,分享给你:

首先要明确:新版diagrams已经彻底废弃了SizeSpec2D和mkSizeSpec这类旧API,取而代之的是更直观的尺寸指定函数。下面是在GHCi里直接生成斐波那契SVG图的完整操作步骤:

1. 先搞定依赖

确保你已经安装了必要的diagrams包(用cabal或stack都可以):

# 用cabal安装
cabal install diagrams-lib diagrams-svg

# 或者用stack安装
stack install diagrams-lib diagrams-svg

2. 启动GHCi并导入核心模块

打开终端启动GHCi,然后导入需要的模块:

import Diagrams.Prelude
import Diagrams.Backend.SVG.CmdLine

3. 定义斐波那契图形函数

把经典的斐波那契螺旋示例代码复制到GHCi里:

fibDiagram :: Int -> Diagram B
fibDiagram n = foldr buildSegment mempty (zip fibs (tail fibs))
  where
    fibs = take n fibSequence
    fibSequence = 1 : 1 : zipWith (+) fibSequence (tail fibSequence)
    buildSegment (a, b) d = alignBL d ||| alignBL (square b <> arc (0 @@ turn) (1/4 @@ turn) # scale b # translate (b ^& 0))

4. 直接生成SVG文件

用renderSVG函数指定输出文件名、尺寸和图形,比如生成一个宽度800px的SVG:

renderSVG "fibonacci.svg" (mkWidth 800) (fibDiagram 10)
  • 如果想固定高度,把mkWidth 800换成mkHeight 600即可
  • 如果要强制图形适配固定宽高(可能会拉伸),用dims2D 800 600

执行完这条命令后,当前目录下就会生成fibonacci.svg文件,全程不需要预先编译!

关键API说明

新版diagrams把尺寸指定拆成了更明确的函数,彻底替代了旧的mkSizeSpec:

  • mkWidth w:让图形按宽度w缩放,高度自动适配比例
  • mkHeight h:让图形按高度h缩放,宽度自动适配比例
  • dims2D w h:强制图形填充w×h的尺寸,不保留原比例

这样在GHCi里就能快速调试图形效果,不用每次都写main函数编译啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:51:04