Fun fact: you can make Haskell support implicit string concatenation, but it's a bit ugly and not advised.
The route is via the OverloadedStrings extension, and then implementing an instance for IsString (String -> String) and IsString (String -> String -> String) etc.