Очистка FizzBuzz

Я все еще изучаю Haskell, и мне было интересно, есть ли менее подробный способ выразить приведенный ниже оператор с помощью одной строки кода:

map (\x -> (x, (if mod x 3 == 0 then "fizz" else "") ++ 
 if mod x 5 == 0 then "buzz" else "")) [1..100]

Производит: [(1, ""), (2, ""), (3, "шипение"), (4, ""), (5, "жужжание"), (6, "шипение"), ( 7, ""), (8, ""), (9, "fizz"), (10, "buzz"), (11, ""), (12, "fizz"), (13, "") , (14, ""), (15, "fizzbuzz"), (16, ""), (17, ""), (18, "fizz"), (19, ""), (20, "buzz "), (21," fizz "), (22," "), (23," "), (24," fizz "), (25," buzz "), (26," "), (27 , "fizz"), (28, ""), (29, ""), (30, "fizzbuzz") , и т. д.

Такое ощущение, что я борюсь с синтаксисом больше, чем должен. Я видел и другие вопросы по этому поводу в Haskell, но я ищу наиболее оптимальный способ выразить это в одном выражении (пытаясь понять, как лучше работать с синтаксисом).

7
задан cdlane 24 May 2016 в 19:24
поделиться