Я изучаю Haskell, и мне не всегда ясно, когда использовать помощник и когда использовать охранника. Для определенных сценариев кажется, что помощники и охранники могут использоваться для достижения практически тех же целей. Существуют ли какие-то правила или эвристики, когда лучше использовать спички над стражами или наоборот? Является ли еще один исполнитель, чем другой?
Чтобы проиллюстрировать то, что я получаю, вот несколько глупых примеров, которые я приготовил, которые кажутся эквивалентными, но одна версия использует матчи, а другая использует защитные устройства:
listcheck :: [a] -> String
listcheck [] = "List is null :-("
listcheck a = "List is NOT null!!"
listcheck' a
| null a = "List is null :-("
| otherwise = "List is NOT null!!"
и
luckyseven :: Int -> String
luckyseven 7 = "SO LUCKY!"
luckyseven b = "Not so lucky :-/"
luckyseven' c
| c == 7 = "SO LUCKY!"
luckyseven' c = "Not so lucky :-/"
Спасибо!