gpt4 book ai didi

haskell - 为什么 Haskell 的 SVGFonts 库中的这个示例无法编译?

转载 作者:行者123 更新时间:2023-12-02 14:41:06 26 4
gpt4 key购买 nike

使用Haskell的SVGFonts库,我尝试使用textSVG_函数生成图表。这是我试图遵循的示例,它包含在 definition of textSVG_ 的代码中:

text'' t = (textSVG_ (TextOpts lin INSIDE_H KERN True 1 1) t)
# fc blue # lc blue # bg lightgrey # fillRule EvenOdd # showOrigin

它在 TextOpts' textFont 字段中使用 lin。但是,TextOptstextFont 字段的预期内容与 lin 的定义之间似乎存在类型不匹配。 TextOpts' definition显示 textFont 字段的类型为 textFont::PreparedFont n,而 definition of lin显示其类型为 lin::(Read n, RealFloat n) => IO (PreparedFont n)

为什么IOlin中?当我尝试编译它时,它抛出类型不匹配。

Couldn't match type `IO
(Graphics.SVGFonts.ReadFont.PreparedFont Double)'
with `(Graphics.SVGFonts.ReadFont.FontData n,
Graphics.SVGFonts.ReadFont.OutlineMap n)'
Expected type: Graphics.SVGFonts.ReadFont.PreparedFont n
Actual type: IO (Graphics.SVGFonts.ReadFont.PreparedFont Double)

如何简单地向 TextOptstextFont 字段提供 PreparedFont n

最佳答案

截至提交 61424cc 时,他们的文档似乎已经过时并且不再与他们的代码匹配。 。 (这就是为什么你应该使用文档测试, friend 们!)

lin 仍包含在 IO 中时,您无法使用它。做这样的事情:

do
lin' <- lin
let text'' t = (textSVG_ (TextOpts lin' INSIDE_H KERN True 1 1) t)
# fc blue # lc blue # bg lightgrey # fillRule EvenOdd # showOrigin

如果你没有方便的IO,那么将其作为函数参数并稍后获取字体:

text'' font t = (textSVG_ (TextOpts font INSIDE_H KERN True 1 1) t)
# fc blue # lc blue # bg lightgrey # fillRule EvenOdd # showOrigin

或者你可以作弊,like they do in their Default instance :

text'' t = (textSVG_ (TextOpts (unsafePerformIO lin) INSIDE_H KERN True 1 1) t)
# fc blue # lc blue # bg lightgrey # fillRule EvenOdd # showOrigin

关于haskell - 为什么 Haskell 的 SVGFonts 库中的这个示例无法编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59186285/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com