2014-05-18 18 views
9

Zauważyłem, że istnieje również typ IOException w wyjątku Control.Exception, jaki jest sens posiadania oddzielnego modułu System.IO.Error i typu IOError? Czy jest to tylko z powodów historycznych? Czy powinienem unikać używania go i wolę Control.Exception.IOException?Jaki jest sens System.IO.Error

Odpowiedz

12

Tak, to tylko ze względów historycznych.

System.IO.Error ma typ IOError, który jest tylko synonimem typu dla IOException (w GHC i tak).

Mechanizm hierarchii wyjątków GHC nie jest częścią standardu Haskell. Tak więc, IOError jest używany do kompatybilności z Haskell 2010.

Jeśli jesteś zadowolony ze specyfiki GHC, IOException, a cała hierarchia wyjątków jest po prostu lepsza i powinna być preferowana.

+0

dziękuję, czy mam rację, każdy nowy rozwój woli Control.Exception.IOException? Czy istnieją inne takie historyczne moduły wciąż dziko wykorzystywane/nauczane w Internecie? – swang

+0

@ Gwenc37 Proszę nie używać tyknięć kodu na rzeczy, które nie są kodami. – Qix

3

IOError to stary typ Haskell98 IO exception. Control.Exception i inne nowsze warianty niekoniecznie są zgodne z Haskell98, ale możemy w nich osadzić stare błędy Haskell98, stąd synonim typu.