Подозреваю, что с TypeInType можно было бы сформулировать какое-то обобщённое понятие монады, но нужно две вещи при этом понимать:
1. Это вообще не факт, что будет тоталится
2. Любое определение монады в хаскеле необходимое, но не достаточное. Мы верим программисту на слово, что законы выполняются