2017-03-17 5 views
1

Read PureScript by Example book에서 예제를 복제하려고합니다.Error 대 ErrorEvent - Purescript에서 catchException을 사용하여 예외를 처리합니다.

나는이 오류가 무엇입니까 : 여기

Could not match type 

    Error 

with type 

    ErrorEvent 

내가 시도하고 그 예를의 POC를 만들기 위해 사용 된 코드입니다.

import Prelude 
import Control.Monad.Eff 
import Control.Monad.Eff.Console (CONSOLE, log) 
import Control.Monad.Eff.Exception (EXCEPTION, Error, throwException, catchException, error) 
import DOM.HTML.Event.ErrorEvent (message) 

grumpyGills :: forall eff. Boolean -> Eff (err :: EXCEPTION | eff) String 
grumpyGills ateVegetables = if (ateVegetables) 
          then pure("Good Boy") 
          else throwException (error "Eat your vegetables") 

main = do 
    test <- catchException handle $ grumpyGills true 
    log test 

    where 
    handle e = do 
     log (message e) 
     pure("oh well") 

문제는 코드를 사용하려고 할 때 나는 같은 컴파일 오류가 제외 게시, 기본적으로이 예제와 같습니다 How do I return a value from a PureScript function with an EXCEPTION effect?. 나는 내가하는 일을 다르게 보지 못한다.

유형을 볼 수 있습니다 ErrorEventError은 다릅니다. 또한 catchExceptionError을 예상하므로 컴파일 오류가 발생합니다. 나는 내가 뭘 잘못하고 있는지, 어떻게 고쳐야 하는지를 보지 못합니다.

사용 :

  • "purescript-예외" "^ 2.0.0"
  • "purescript-DOM" "^ 3.6.0",

답변

3

를 나는 내가 발견 message을 잘못 사용했습니다.

나는 message imported from here을 사용해야합니다. (Control.Monad.Eff.Exception)

NOT이 message (DOM.HTML.Event.ErrorEvent) 유형의 서명이 다른

주의 .. DERP.

고정 수입은 다음과 같이 :

Could not match type 

    (err :: EXCEPTION 
)     

with type 

    (console :: CONSOLE 
    , err :: EXCEPTION 
    | t0     
) 

grumpyGills 유형 정의에 확장 효과를 추가하여 고정한다 :

import Prelude 
import Control.Monad.Eff 
import Control.Monad.Eff.Console (CONSOLE, log) 
import Control.Monad.Eff.Exception (EXCEPTION, Error, throwException, catchException, error, message) 
-- import DOM.HTML.Event.ErrorEvent (message) -- Don't import message from here! 

나는 두 번째 문제가 있었다. 이것은 또한 것

grumpyGills :: forall eff. Boolean -> Eff (err :: EXCEPTION | eff) String

작동 :

grumpyGills :: Boolean -> Eff (err :: EXCEPTION, console :: CONSOLE) String