Pour faire du TDD, je montrerais QuickCheck.
Pour l'immutabilité, je montrerais les Lenses.
Eviter d'utiliser des listes partout, notamment dans DayStmt, WeekStmt et MonthStmt, vu que le nombre de champs est fixe. Utiliser des lenses ici serait pas mal, surtout pour réécrire la fonction finale. Si je comprends bien elle fait une sélection et une réduction, donc parfait avec des lenses.
Je ne suis pas convaincu par le Monoid, une simple fonction de réduction suffirait :
toStats :: [Temperature] -> Statistics
Là c'est compliqué inutilement je trouve.
Sylvain