gpt4 book ai didi

haskell - 为Canvas设计一个绘图API

转载 作者:行者123 更新时间:2023-12-02 02:04:36 25 4
gpt4 key购买 nike

我正在向 Threepenny ui api 添加一些功能。我希望能够用 Canvas 画线。

我可以编写的函数具有以下签名:

moveTo :: Vector -> UI ()
lineTo :: Vector -> UI ()
stroke :: UI ()
strokeStyle :: UI ()
beginPath :: UI ()

每个基元 moveTolineTo 都应该发生在 beginPath .. 笔划调用之间。您将如何强制执行 beginPath ... 笔划序列。根据设计,我想让用户别无选择来绘制线条。因此用户不知道 beginPath ... 笔划序列。

最佳答案

设计您的 API 使其不会被不当使用绝对是件好事。您在这里可能采取的一种方法是创建一个未导出的包装器,让您可以控制这些特定操作的组成方式(抱歉,我没有尝试运行它):

-- Don't export constructor
newtype Line a = Line { runLine :: UI a }

-- Wrap the return types in your current implementation with Line, for:
moveTo :: Vector -> Line ()
lineTo :: Vector -> Line ()
...

instance Monad Line where
(Line ui) >>= f = Line (ui >>= \a-> beginPath >> (runLine $ f a))
return = Line . return

其他几点:

  1. 如果您的 API 不需要绑定(bind)任何值(即所有行 API 函数都以 -> Line 结尾,您可能需要使用 Monoid 实例) ()

  2. 如果你需要做一些事情,比如将整个组合行 Action 序列包装在例如startend 操作或其他操作,您可以进一步扩展上述内容

    runLine (Line ui) = start >> ui >> end

关于haskell - 为Canvas设计一个绘图API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24456743/

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