Когда я использую императивный язык, я часто пишу код вроде
foo (x) {
if (x < 0) return True;
y = getForX(x);
if (y < 0) return True;
return x < y;
}
То есть, я проверяю условия один за другим, вырываясь из блока, как только насколько это возможно.
Мне это нравится, потому что он держит код "плоским" и подчиняется принципу "end" вес ". Я считаю, что это более читаемо.
Но в Haskell я бы написал, что как
foo x = do
if x < 0
then return x
else do
y <- getForX x
if y < 0
then return True
else return $ x < y
Что мне не нравится. Я мог бы использовать монаду, которая позволяет вырваться, но
так как я уже использую монаду, мне придется lift
все, что добавляет слова
Я бы хотел избежать, если смогу.
Я полагаю, что на самом деле это не идеальное решение, но у кого-то есть любые советы?