【发布时间】:2010-04-21 21:44:18
【问题描述】:
我想知道捕捉和处理异常的“Haskell 方式”。如下图,基本的语法我都懂了,但是不知道这种情况下类型系统怎么处理。
以下代码尝试返回请求的环境变量的值。显然,如果该变量不存在,我想捕获异常并返回 Nothing。
getEnvVar x = do {
var <- getEnv x;
Just var;
} `catch` \ex -> do {
Nothing
}
这是错误:
Couldn't match expected type `IO a'
against inferred type `Maybe String'
In the expression: Just var
In the first argument of `catch', namely
`do { var <- getEnv x;
Just var }'
In the expression:
do { var <- getEnv x;
Just var }
`catch`
\ ex -> do { Nothing }
我可以返回字符串值:
getEnvVar x = do {
var <- getEnv x;
return var;
} `catch` \ex -> do {
""
}
然而,这不像是 Haskell 的方式。什么是 Haskell 方式?
编辑:更新代码以正确反映描述。
【问题讨论】: