2016-07-08 34 views
1

我跟随this walkthrough如何绘制到purescript中的HTML画布。不幸的是,我遇到了让代码工作的问题。我按照教程创建了下面的代码,但它不会编译:如何在没有有效计算的情况下返回一个Eff monad?

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 

我应该如何处理“跑没什么”案件?为了匹配类型签名,它需要返回一个Eff值,是否有一种简单的方法将计算包装在Eff monad中?

回答

2

pure是您正在寻找的功能 - 我们不再有return,因为它是多余的,因为ApplicativeMonad的超类。

+0

太棒了,谢谢! –

相关问题