Error 与 ErrorEvent - 在 Purescript 中使用 catchException 来处理异常
Error vs ErrorEvent - Use catchException in Purescript to handle an Exception
我正在尝试复制 Read PureScript by Example book 中的示例。
我收到此错误:
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")
问题与此示例基本相同,除了我在尝试使用发布的代码时遇到相同的编译错误:。我看不出我在做什么不同。
我可以看到 ErrorEvent and Error are different. I can also see that catchException 的类型需要一个 Error
,因此编译失败。我只是看不出我做错了什么,以及如何解决它。
使用:
- "purescript-exceptions": "^2.0.0"
- "purescript-dom": "^3.6.0",
我发现我用错了message
。
我应该一直在使用 message
imported from here。 (Control.Monad.Eff.Exception)
不是这个 message
(DOM.HTML.Event.ErrorEvent)
注意类型签名不同..derp.
固定导入如下所示:
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!
我有第二个问题:
Could not match type
( err :: EXCEPTION
)
with type
( console :: CONSOLE
, err :: EXCEPTION
| t0
)
我通过在我的 grumpyGills
类型定义中添加可扩展的效果来解决这个问题。
grumpyGills :: forall eff. Boolean -> Eff (err :: EXCEPTION | eff) String
这也行得通:
grumpyGills :: Boolean -> Eff (err :: EXCEPTION, console :: CONSOLE) String
我正在尝试复制 Read PureScript by Example book 中的示例。
我收到此错误:
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")
问题与此示例基本相同,除了我在尝试使用发布的代码时遇到相同的编译错误:
我可以看到 ErrorEvent and Error are different. I can also see that catchException 的类型需要一个 Error
,因此编译失败。我只是看不出我做错了什么,以及如何解决它。
使用:
- "purescript-exceptions": "^2.0.0"
- "purescript-dom": "^3.6.0",
我发现我用错了message
。
我应该一直在使用 message
imported from here。 (Control.Monad.Eff.Exception)
不是这个 message
(DOM.HTML.Event.ErrorEvent)
注意类型签名不同..derp.
固定导入如下所示:
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!
我有第二个问题:
Could not match type
( err :: EXCEPTION
)
with type
( console :: CONSOLE
, err :: EXCEPTION
| t0
)
我通过在我的 grumpyGills
类型定义中添加可扩展的效果来解决这个问题。
grumpyGills :: forall eff. Boolean -> Eff (err :: EXCEPTION | eff) String
这也行得通:
grumpyGills :: Boolean -> Eff (err :: EXCEPTION, console :: CONSOLE) String