7
Zróbmy następujące założenia:Czy istnieje sposób na uzyskanie wyjątku w Haskell?
- mój program przerywa z powodu nieprzechwyconego wyjątkiem
- Nie mam pojęcia, co typ tego wyjątku jest
- komunikat o błędzie drukowana nie zawiera wskazówkę na temat rodzaju wyjątków
Jak dowiem się, jaki jest ten wyjątek?
Minimal przykład:
main = error "foo"
(. Tutaj to oczywiście ErrorCall
, ale nie można powiedzieć z komunikatem o błędzie)
Próbował pan jest? Nie, ale zakładam, że to wydrukuje 'SomeException'. – user1078763
Kod Haskella '(SomeException e)' does ** not ** oznacza, że 'e' ma typ' SomeException', który zostałby napisany 'e :: SomeException' (ale nie może pojawić się we wzorach). Jedyny występ "SomeException" powyżej jest konstruktorem. Istnieją dwie rzeczy o nazwie "SomeException": typ i konstruktor. –
Ah, nie przeczytałem poprawnie kodu. Więc tak, to rzeczywiście zadziała. Nie przy pierwszym strzale dla wyjątków, które siedzą głęboko w hierarchii, ale mogę się tam dostać krok po kroku. – user1078763