Что делать с "сбросить" в do-нотации Purescript?

Возникла проблема с некоторыми примерами из книги "Изучите Purescript by Example". В частности, этот код из раздела 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
    }

выдает следующую ошибку:

в модуле Example.Rectangle в src\Example\Rectangle.purs строка 16, столбец 3 - строка 16, столбец 29

Результат типа

context2d

был неявно отброшен в блоке записи do. Вы можете использовать _ <-..., чтобы явно отменить результат.

при применении функции discard типа Discard t0 => Bind t1 => t1 t0 -> (t0 -> t1 t2) -> t1 t2 к аргументу (setFillStyle "#0000FF") ctx при выводе типа discard ((setFillStyle ") #0000FF") ctx) в объявлении значения main

где t0 - неизвестный тип, t2 - неизвестный тип, t1 - неизвестный тип.

См. https://github.com/purescript/documentation/blob/master/errors/NoInstanceFound.md для получения дополнительной информации,

Предложенная ошибка не помогает, и я не могу понять, что делает "сброс". Я также заметил похожую проблему, например, с функцией "имитация" из раздела 8.17. Если я попытаюсь предложить назначение, используя "_ <-", появятся более случайные кажущиеся ошибки.

(Это использует PSCi 0.11.5)

1 ответ

Решение

Больше не разрешается неявно отбрасывать значение в блоке do.

Вы можете: - игнорировать значение явно: _<- setFillStyle.... - или если возвращаемое значение равно Unit (например, Eff fx Unit), вы можете просто импортировать "discard" из "Prelude"

Другие вопросы по тегам