Когда я использую поймать, я получаю это предупреждение:Как я могу правильно использовать catch?
Warning: In the use of `catch'
(imported from System.IO.Error):
Deprecated: "Please use the new exceptions variant, Control.Exception.catch"
Я пытался использовать Control.Exception.catch вместо этого, но я чеканка ошибки вниз слишком много отверстий крысы. Может ли кто-нибудь опубликовать пример, где второй аргумент catch поймает ошибку UnsupportedOperation, вызванную getTemporaryDirectory?
tempdir <- catch (getTemporaryDirectory)
(\e -> return ".")
Кроме того, как я использую синтаксис поймать в улове документы:
catch f (\e -> ... (e :: SomeException) ...)
Я перепробовал все вариации этого синтаксиса я могу думать, и я всегда получаю сообщение об ошибке; не представляется возможным заключить аннотацию типа (?) в круглых скобках, например, в лямбда. Крайне плохая документация, на мой взгляд. К сожалению, это кажется стандартом, к которому стремятся писатели-докеры.
ISN» Не считалось ли плохой практикой ловить все исключения? Я пытаюсь ограничить улов, чтобы поймать только UnsupportedOperation. Когда я использую e :: UnsupportedOperation, я получаю конструктор типа или класс 'UnsupportedOperation '. Я также отмечу, что я посмотрел высоко и в документах haskell для списка исключений haskell безрезультатно. – 7stud
О! Вы ловите 'IOException', а затем используете функции из' System.IO.Error', чтобы определить, какой тип 'IOException' он есть. Однако последняя 'base' не имеет' UnsupportedOperation' 'IOException'. У этого есть ошибка незаконной операции, которую вы можете протестировать с помощью 'isIllegalOperation', но мне нужно проверить, является ли это правильным исключением для catch для этой функции. Оставайтесь на линии. –
@ 7stud Извините, я не могу понять, какое исключение он бросит. :(Лучше всего на данный момент просто ловить 'IOException'. –