Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Haskell
Перезагрузить страницу Как правильно обработать ошибку?
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Q0i Q0i вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.07.2012
По умолчанию Как правильно обработать ошибку? - 01.09.2012, 01:13

Доброго времени суток.

Данная программа открывает file.txt и обрабатывает содержащиеся в нём строки по очереди.

haskell Код:
import qualified Control.Exception as Exc

main = do
    contents <- readFile "file.txt"
    let
        arr_lines = lines contents
        sum = foldl processLine 0 arr_lines
    print sum
   
processLine :: Int -> String -> Int
processLine sum line = sum + ( length $ tail $ drop 3 line )

При обработке строки может произойти ошибка - вызов tail на пустом списке.
В более сложных примерах функция processLine может иметь несколько причин для сбоев.
Нужно сделать так, чтобы при возникновении ошибки в processLine программа печатала на экран проблемную строку line.

Первое что приходит в голову - использовать исключения.
Однако мне не понятно, как их сюда засунуть.
Судя по описанию API исключения обязательно должны работать непосредственно с IO-монадой.
Например,
Control.Exception.catch :: Exception e => IO a -> (e -> IO a) -> IO a
Данная программа работает под IO-монадой, однако ошибка возникает в функции processLine, которая про монаду ничего не знает.
Генерировать исключение надо именно в processLine, так как уровнем выше проблемная строка line уже не доступна.

Как решить эту проблему?

Последний раз редактировалось Q0i; 01.09.2012 в 04:26
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SWI. Предикат определяет является ли терм булевой формулой. Надо обработать ошибку. Jia Prolog 4 25.12.2011 20:40
Как обработать xls файлы Timerhan C++ Builder 2 11.01.2011 10:42
Opera - программа совершила недопустимую ошибку, можно ли исправить ошибку? dok Любые вопросы от новичков 3 23.03.2010 12:34
Korpus как обработать текст Eugi Общие вопросы программирования 0 02.08.2009 12:45
Как обработать ошибку на одинаковый текст в ключевом поле imported_Katrina C++ Builder 7 18.01.2006 17:29
ICMP как обработать пакет Trask C++ на Unix 0 07.12.2005 04:13
Как обработать BMP файл в Visual C++ zerkalo Visual C++ 1 06.09.2004 03:56
Как обработать нажатие клавиш se7en DHTML, JavaScript, VBScript 2 06.07.2004 20:16
Как обработать событие CComboBox Anonymous Visual C++ 29 26.12.2003 16:27
Как обработать текст страницы imported_VVS DHTML, JavaScript, VBScript 4 21.07.2003 15:24
Как обработать клавиатурный int из VxD Anonymous Assembler 1 15.10.2002 03:01
Как обработать клавиатурный int из VxD Anonymous С/С++ 0 09.10.2002 02:08



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов