сравнить две даты [...] отнимать текущую дату - и получаю разницу в днях. И эта разница должна быть не более чем 16 То есть дата от пользователя должна быть не раньше текущей (чтобы не улететь в прошлое), но не позже чем "текущая + 16 дней"
-- количество дней (но не меньше 0 и не больше 16) от сего дня (today) до указанного дня (day)
-- возвращаемое число лежит в интервале [0, 16]
strippedDayDiff :: Day -> Day -> Integer
strippedDayDiff day today = let d = diffDays day today in if d > 16 then 16 else if d < 0 then 0 else d
Использование:
if strippedDayDiff forecastDay (utctDay currentTime) >= ...
Если нужно проверить, что разница лежит ровно в диапазоне [0, 16], то
diffDaysIn0_16 day today = let d = diffDays day today in 0 <= d && d <= 16
P.S.
Сергей, там есть более узкоспециализированные функции. Думаю, основная проблема изначально состояла в том, что в коде не были проставлены типы и/или выбор возвращаемых значений не соответствует поставленной устно задаче.