setTitle :: MonadWidget m => Html -> m ()
читается как следующий контракт между вызывающей стороной и реализацией функции
- вызывающий должен выбрать
m
- вызывающий должен убедиться, что выбранный
m
удовлетворяет ограничению MonadWidget m
- вызывающая сторона должна передать
Html
аргумент
- функция вернет значение типа
m ()
Обратите внимание, что setTitle
нельзя выбирать m
. Эта функция полиморфна (или «универсальна» в языке ООП) и работает на любом m
, который выбирает вызывающий.
Поскольку defaultLayout
требует m = WidgetFor site
, GHC определяет, какую монаду следует использовать при вызове setTitle
. Затем все проверяет тип.