2

对通过示例学习 Purescript 一书中的某些示例有疑问。特别是第 9.3 节中的这段代码:

main :: Eff (canvas :: CANVAS) Unit
main = void $ unsafePartial do
  Just canvas <- getCanvasElementById "canvas"
  ctx <- getContext2D canvas

  setFillStyle "#0000FF" ctx -- this's line 16 referred to in the error message

  fillPath ctx $ rect ctx
    { x: 250.0
    , y: 250.0
    , w: 100.0
    , h: 100.0
    }

给出以下错误:

在 src\Example\Rectangle.purs 模块 Example.Rectangle 第 16 行,第 3 列 - 第 16 行,第 29 列

类型的结果

上下文二维

在 do 表示法块中被隐式丢弃。您可以使用 _ <- ... 显式丢弃结果。

在应用 Discard t0 => Bind t1 => t1 t0 -> (t0 -> t1 t2) -> t1 t2 到参数 (setFillStyle "#0000FF") ctx 类型的函数丢弃时,同时推断丢弃的类型 ((setFillStyle " #0000FF") ctx) 在值声明 main

其中 t0 是未知类型 t2 是未知类型 t1 是未知类型

有关更多信息,请参阅https://github.com/purescript/documentation/blob/master/errors/NoInstanceFound.md ,

建议的错误没有帮助,我无法弄清楚“丢弃”究竟做了什么。我还注意到一个类似的问题,例如,第 8.17 节中的“模拟”功能。如果我尝试使用“_ <-”进行分配的建议,就会出现更多看似随机的错误。

(这是使用 PSCi 0.11.5)

4

1 回答 1

3

不再允许隐式丢弃 do 块中的值。

您可以: - 明确忽略该值:_ <- setFillStyle.... - 或者如果返回值为 Unit(例如 Eff fx Unit),您可以简单地从“Prelude”导入“discard”

于 2017-07-06T16:29:05.740 回答