如何在没有有效计算的情况下 return Eff monad?
How to return an Eff monad without an effectful computation?
我正在关注 this walkthrough 如何在纯脚本中绘制 html canvas。不幸的是,我 运行 遇到了让代码工作的问题。我按照教程创建了以下代码,但无法编译:
main = do
-- Canvas has type Maybe CanvasElement
canvas <- getCanvasElementById "canvas"
-- Type mismatch: CanvasElement expected, (Maybe CanvasElement) provided
context <- getContext2D canvas
runGraphics context $ do
setFillStyle "#00FFFF"
rect { x: 0, y: 0, w: 400, h: 600 }
fill
我尝试通过执行以下操作来解决问题:
run Nothing = do return Unit -- Doesn't compile
run (Just canvas) = do
g2d <- GraphicsBuilder.getContext2D canvas
runGraphics g2d $ do
setFillStyle "#00FFFF"
rect { x: 0.0, y: 0.0, w: 400.0, h: 600.0 }
fill
main = do
mcanvas <- GraphicsBuilder.getCanvasElementById "canvas"
run mcanvas
我该如何处理"run Nothing"的情况?为了使其匹配它需要的类型签名 return Eff 值,是否有一种简单的方法将计算包装在 Eff monad 中?
pure
是您正在寻找的函数 - 我们不再有 return
因为当 Applicative
是 Monad
的超类时它是多余的。
我正在关注 this walkthrough 如何在纯脚本中绘制 html canvas。不幸的是,我 运行 遇到了让代码工作的问题。我按照教程创建了以下代码,但无法编译:
main = do
-- Canvas has type Maybe CanvasElement
canvas <- getCanvasElementById "canvas"
-- Type mismatch: CanvasElement expected, (Maybe CanvasElement) provided
context <- getContext2D canvas
runGraphics context $ do
setFillStyle "#00FFFF"
rect { x: 0, y: 0, w: 400, h: 600 }
fill
我尝试通过执行以下操作来解决问题:
run Nothing = do return Unit -- Doesn't compile
run (Just canvas) = do
g2d <- GraphicsBuilder.getContext2D canvas
runGraphics g2d $ do
setFillStyle "#00FFFF"
rect { x: 0.0, y: 0.0, w: 400.0, h: 600.0 }
fill
main = do
mcanvas <- GraphicsBuilder.getCanvasElementById "canvas"
run mcanvas
我该如何处理"run Nothing"的情况?为了使其匹配它需要的类型签名 return Eff 值,是否有一种简单的方法将计算包装在 Eff monad 中?
pure
是您正在寻找的函数 - 我们不再有 return
因为当 Applicative
是 Monad
的超类时它是多余的。