我想知道「Haskell方式」來捕獲和處理異常。如下所示,我理解基本語法,但我不確定在這種情況下如何處理類型系統。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方式?
編輯:更新了代碼以正確反映描述。
有沒有必要使用此單子的力量; 'getEnvVar x = fmap(lookup x)getEnvironment'工作得很好,並且需要使用'return' – Warbo 2015-08-01 08:24:30