2016-07-08 5 views
1

Я следую this walkthrough о том, как рисовать на холсте html в purescript. К сожалению, я столкнулся с проблемой получения кода для работы. Я создал следующий код, следуя учебник, но он не компилируется:Как вернуть монаду Eff без эффективного вычисления?

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?

ответ

2

pure это функция, которую вы ищете - мы больше не return, поскольку он является избыточным, когда Applicative является суперкласс Monad.

+0

Удивительно, спасибо! –

Смежные вопросы