Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
with Ada.Integer_Text_Io, Ada.Text_Io;
use Ada.Integer_Text_Io, Ada.Text_Io;
procedure Test is
v : Long_Float := 26.0;
v1 : float := 26.0;
begin
while (v<27.0) loop
Put_Line("Value = " & Long_Float'image(v));
v:=v+0.2;
end loop;
while (v1<27.0) loop
Put_Line("Value = " & float'image(v1));
v1:=v1+0.2;
end loop;
end;
f = expr `catches` [Handler (\ (ex :: ArithException) -> handleArith ex), Handler (\ (ex :: IOException) -> handleIO ex)]
Собственно это пример как в хаскеле перехватывать исключения из одного выражения expr.
Выглядит конечно отстойно. Очень многословно и судя по всему метода проще нет. И понятное дело, в чистых ленивых функциях это не работает. Ловить исключения можно только в грязных IO-функциях, тк сигнатура такова: catches :: IO a -> [Handler a] -> IO a
(format t "~{~[~:R~; ~S~:;none~] chance~^, ~}" '(0 1 0 2 0 3))
;; first chance, second chance, third chance
Любителям ДСЛ (а так же древесно-стружечных плит, и других керамических изделий):
Объясните почему так работает? Наверное не говнокод, просто нихрена не понятно.
Я тут читал раздел на одном форуме по решению задач для школьников и наткнулся на такое говно.
- let?
- Не, не слышал.
Подозреваю, что автор не понял, что let нужно писать без in в монадах, чтобы скомпилировалось.