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\$