I wrote a solution to the popularized FizzBuzz problem in Haskell to see how a functional solution looks. I'm more or less happy with my solution, except for the definition of list
. It just looks sort of contorted.
Are there any language features in Haskell which can improve the readability of this code, especially the definition of list
, while preserving the extensibility that table
provides?
import Control.Arrow
main = mapM_ (putStrLn . fizzBuzzLogic) [1..100]
fizzBuzzLogic :: Int -> String
fizzBuzzLogic x
| null list = show x
| otherwise = foldl1 (++) list
where
list = map snd . filter ((==0) .fst) $ map (first (mod x)) table
table = [(3,"Fizz")
,(5,"Buzz")
] --add more modulo tokens if you wish
foldl1 (++)
useconcat
\$\endgroup\$ – Bergi Apr 26 '14 at 19:15