Defining the translation type and providing the RenderMessage
instance in Haskell is not very translator friendly. Instead,
translations are generally provided in external translations
files. Then the mkMessage Template Haskell function is used to
read the external translation files and automatically create the
translation type and the RenderMessage instance.

A full description of using this module to create translations for Hamlet can be found here:

The master argument exists so that it is possible to provide more
than one set of translations for a message type. This is useful
if a library provides a default set of translations, but the user
of the library wants to provide a different set of translations.