Мне бы хотелось узнать «способ Haskell» для отлова и обработки исключений. Как показано ниже, я понимаю основной синтаксис, но я не уверен, что делать в этой ситуации с системой типов.
Приведенный ниже код пытается вернуть значение запрошенной переменной среды. Очевидно, что если этой переменной нет, я хочу перехватить исключение и ничего не возвращать.
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 {
""
}
однако, это не похоже на путь Хаскелла. Что такое путь на Хаскеле?
Редактировать: Обновлен код для правильного отражения описания.