Earlier quoted context omitted.
I don't see why javascript: is fundamentally different than other XSS vectors
because for other types of injections Yesod WILL actually properly encode tags and make them <script> which will prevent SOME XSS exploits but it doesn't prevent all of them
Yesod uses xss-sanitize [0], and their sanitize function does indeed prevent "javascript:" attempts. They even have a test case for it [1].
Playing around with it in the REPL:
Prelude Text.HTML.SanitizeXSS Data.Text> sanitize $ pack ""
""
Prelude Text.HTML.SanitizeXSS Data.Text> sanitize $ pack ""
""
Prelude Text.HTML.SanitizeXSS Data.Text> sanitize $ pack ""
""
Prelude Text.HTML.SanitizeXSS Data.Text> sanitize $ pack ""
""
[0]: https://hackage.haskell.org/package/xss-sanitize[1]: https://github.com/yesodweb/haskell-xss-sanitize/blob/9a9101...