Что делать с "сбросить" в 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"