To bring this into sharper detail, notice that there's the "OverloadedStrings" compiler directive at the top of the file. That means that "hello " and "!" are of type Html, different from String. Strings can only be concatenated with Html after they've been escaped.
For more elaboration, see http://blog.moertel.com/posts/2006-10-18-a-type-based-soluti...