(Fractional a, Ord a) => a -> Char
avgGrade x
| y >= 0.9 = 'A'
| y >= 0.8 = 'B'
| y >= 0.7 = 'C'
| y >= 0.59 = 'D'
| y < 0.59 = 'F'
where y = x / 100
?
Про let in уже сказали. Можно ещё в принципе избавиться от y, а x сравнивать с 90, 80, 70 и т.д.
две функции в топлевел
{-# LANGUAGE ViewPatterns #-} avgGrade :: (Fractional a, Ord a) => a -> Char avgGrade ((\x -> x / 100) -> y) | y >= 0.9 = 'A' | y >= 0.8 = 'B' | y >= 0.7 = 'C' | y >= 0.59 = 'D' | y < 0.59 = 'F'
ну тогда уж ((* 0.01) -> y)
а зачем? с where красивее
Да, согласен. Просто было интересно как наоборот
Красивее не делить на 100, а сразу х использовать
avgGrade x | x >= 90 = 'A' | x >= 80 = 'B' | x >= 70 = 'C' | x >= 59 = 'D' | x < 59 = 'F' | otherwise = undefined
Это просто пример из книги )
Обсуждают сегодня