Если исправить источник ошибки невозможно, вы должны посмотреть на это:
http://www.haskell.org/ghc/docs/latest/html/libraries/base/Control-Exception.html
Я полагаю, что использование «handle», «try», «catch» или чего-либо еще из Control.Exception является ключевым здесь: функции в стандартной прелюдии имеют дело только с IO-Exception, а не с ошибками в чистом коде.
В Haskell98 чистый код не может обрабатывать исключения. Чистые функции должны возвращать значение, исключение составляет невозможность возврата значения.
Пример:
import qualified Control.Exception as C
x ::String
x = undefined
y = "return value"
main = do C.handle (\_ -> return "caught") (C.evaluate x) >>= print
C.handle (\_ -> return "caught") (C.evaluate y) >>= print
Призыв к оценке состоит в том, чтобы заставить вычислять x и y, при этом haskell ленив и все.
Если вы позволите вычислению x быть отложенным на более поздний срок (лениво), исключение также будет сгенерировано позже, в другом месте (в данном случае это «print», использующее значение), где оно может не быть. пойманы.